滚动 GUI 不按我想要的方式工作
Scroll for GUI not working the way I want it to
我试图让这个 GUI 上的文本区域有一个滚动条,但是当我尝试添加它时,文本区域覆盖了滚动条,反之亦然。没有错误。代码:
// Text Area at the Center
JTextArea ta = new JTextArea ( 16, 58 );
ta.setEditable ( false ); // set textArea non-editable
JScrollPane scroll = new JScrollPane ( ta );
scroll.setVerticalScrollBarPolicy ( ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS );
send.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent send) {
String data = tf.getText();
ta.append("You: " + data + "\n");
tf.setText("");
System.out.println(data);
}
});
//Adding Components to the frame.
frame.getContentPane().add(BorderLayout.SOUTH, panel);
frame.getContentPane().add(BorderLayout.CENTER, ta);
frame.add(ta);
ta.add(scroll);
frame.setVisible(true);
这些行是问题所在:
frame.getContentPane().add(BorderLayout.CENTER, ta);
frame.add(ta);
ta.add(scroll);
不要将 JTextArea
添加到您的框架中,因为 JTextArea
已正确配置为位于 JScrollPane
的视口内(因为您已将其提供给滚动窗格之前的构造函数)。此外,您不应该将 JScrollPane
添加到 JTextArea
,因为您希望相反。
正确的方法是删除提到的行并简单地将 scroll
添加到您的 JFrame
,如下所示:
frame.add(scroll, BorderLayout.CENTER);
旁注:
- 如评论中所述,考虑在将框架设置为可见之前调用
pack()
,以正确调整框架及其组件的大小。
我试图让这个 GUI 上的文本区域有一个滚动条,但是当我尝试添加它时,文本区域覆盖了滚动条,反之亦然。没有错误。代码:
// Text Area at the Center
JTextArea ta = new JTextArea ( 16, 58 );
ta.setEditable ( false ); // set textArea non-editable
JScrollPane scroll = new JScrollPane ( ta );
scroll.setVerticalScrollBarPolicy ( ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS );
send.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent send) {
String data = tf.getText();
ta.append("You: " + data + "\n");
tf.setText("");
System.out.println(data);
}
});
//Adding Components to the frame.
frame.getContentPane().add(BorderLayout.SOUTH, panel);
frame.getContentPane().add(BorderLayout.CENTER, ta);
frame.add(ta);
ta.add(scroll);
frame.setVisible(true);
这些行是问题所在:
frame.getContentPane().add(BorderLayout.CENTER, ta);
frame.add(ta);
ta.add(scroll);
不要将 JTextArea
添加到您的框架中,因为 JTextArea
已正确配置为位于 JScrollPane
的视口内(因为您已将其提供给滚动窗格之前的构造函数)。此外,您不应该将 JScrollPane
添加到 JTextArea
,因为您希望相反。
正确的方法是删除提到的行并简单地将 scroll
添加到您的 JFrame
,如下所示:
frame.add(scroll, BorderLayout.CENTER);
旁注:
- 如评论中所述,考虑在将框架设置为可见之前调用
pack()
,以正确调整框架及其组件的大小。