向 JTextArea 添加滚动条
Adding a scrollbar to JTextArea
我正在尝试将垂直滚动条添加到 logConsole(这是一个 JTextArea)。然而,在遵循了一些关于如何做到这一点的指南之后,我仍然无法在我的 GUI 中显示滚动条。
请在下面找到代码。
非常感谢任何帮助。
谢谢!
class GUIFrame extends JFrame {
static JTextArea logConsole = new JTextArea();
static JTextField gameConsole;
private static JFrame frame = new JFrame("Game Text Console - Cluedo Client v0.1");
private static JPanel panel = new JPanel();
private static ButtonListener buttonListener = new ButtonListener();
private static JTextArea instruction = new JTextArea();
static void createFrame(){
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
logConsole.setEditable(false);
panel.setLayout(new FlowLayout());
gameConsole = new JTextField(20); // LOG CONSOLE = Output uneditable
JButton enterButton = new JButton("Enter");
enterButton.setActionCommand("Enter");
enterButton.addActionListener(buttonListener);
gameConsole.setActionCommand("Enter"); //GAME CONSOLE = Input editable
gameConsole.addActionListener(buttonListener);
DefaultCaret caret = (DefaultCaret) logConsole.getCaret(); // set update constantly on for logConsole
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
logConsole.setPreferredSize(new Dimension(500, 100));
panel.setPreferredSize(new Dimension( 1000,300));
instruction.setOpaque(true);
instruction.setText("Enter the commands here:");
logConsole.setText("Previous events in Game: \n\n");
JScrollPane jp = new JScrollPane(logConsole); //Add scrollbars.
jp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
panel.add(instruction);
panel.add(gameConsole);
panel.add(enterButton);
panel.add(logConsole);
//frame.add(jp);
frame.getContentPane().add(BorderLayout.CENTER, panel);
frame.pack();
frame.setVisible(true);
panel.requestFocus();
}
}
开始于
删除 logConsole.setPreferredSize(new Dimension(500, 100));
并将 panel.add(logConsole);
替换为 panel.add(jp);
为什么?
setPreferredSize
将固定文本区域的大小,防止它随着文本的变化而增大(或缩小)。默认情况下,JTextArea
将根据 text
属性
计算出它的 preferredSize
如果您想影响“默认可滚动视口大小”,那么您应该使用 columns
和 rows
属性,您可以通过 JTextArea(rows, columns)
构造函数轻松指定它们.这提供了一种独立于平台的方式来指定 JTextArea
的所需可视区域
通过将 logConsole
添加到 panel
,您首先将其从 JScrollPane
中删除,所以这有点违背了目的
我建议花一些时间查看 How to use scroll panes 和可用示例
我正在尝试将垂直滚动条添加到 logConsole(这是一个 JTextArea)。然而,在遵循了一些关于如何做到这一点的指南之后,我仍然无法在我的 GUI 中显示滚动条。
请在下面找到代码。
非常感谢任何帮助。
谢谢!
class GUIFrame extends JFrame {
static JTextArea logConsole = new JTextArea();
static JTextField gameConsole;
private static JFrame frame = new JFrame("Game Text Console - Cluedo Client v0.1");
private static JPanel panel = new JPanel();
private static ButtonListener buttonListener = new ButtonListener();
private static JTextArea instruction = new JTextArea();
static void createFrame(){
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
logConsole.setEditable(false);
panel.setLayout(new FlowLayout());
gameConsole = new JTextField(20); // LOG CONSOLE = Output uneditable
JButton enterButton = new JButton("Enter");
enterButton.setActionCommand("Enter");
enterButton.addActionListener(buttonListener);
gameConsole.setActionCommand("Enter"); //GAME CONSOLE = Input editable
gameConsole.addActionListener(buttonListener);
DefaultCaret caret = (DefaultCaret) logConsole.getCaret(); // set update constantly on for logConsole
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
logConsole.setPreferredSize(new Dimension(500, 100));
panel.setPreferredSize(new Dimension( 1000,300));
instruction.setOpaque(true);
instruction.setText("Enter the commands here:");
logConsole.setText("Previous events in Game: \n\n");
JScrollPane jp = new JScrollPane(logConsole); //Add scrollbars.
jp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
panel.add(instruction);
panel.add(gameConsole);
panel.add(enterButton);
panel.add(logConsole);
//frame.add(jp);
frame.getContentPane().add(BorderLayout.CENTER, panel);
frame.pack();
frame.setVisible(true);
panel.requestFocus();
}
}
开始于
删除 logConsole.setPreferredSize(new Dimension(500, 100));
并将 panel.add(logConsole);
替换为 panel.add(jp);
为什么?
setPreferredSize
将固定文本区域的大小,防止它随着文本的变化而增大(或缩小)。默认情况下,JTextArea
将根据 text
属性
preferredSize
如果您想影响“默认可滚动视口大小”,那么您应该使用 columns
和 rows
属性,您可以通过 JTextArea(rows, columns)
构造函数轻松指定它们.这提供了一种独立于平台的方式来指定 JTextArea
通过将 logConsole
添加到 panel
,您首先将其从 JScrollPane
中删除,所以这有点违背了目的
我建议花一些时间查看 How to use scroll panes 和可用示例