我正在制作一个简单的GUI并遇到问题。 这是我的代码:
JFrame jFrame = new JFrame();
jFrame.setTitle("Simple Editor");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setLocation(50,50);
jFrame.setResizable(true);
Box box = new Box(BoxLayout.Y_AXIS);
JTextArea jTextArea = new JTextArea();
jTextArea.setPreferredSize(new Dimension(470,500));
JLabel jLabel = new JLabel();
box.add(jTextArea);
box.add(jLabel);
jLabel.setText("Font type : " + Main.fontType + " font size : " + Main.size
+ " background color : " + Main.backgroundColor
+ " font color : " + Main.fontColor);
jFrame.setContentPane(box);
jFrame.pack();
jFrame.setVisible(true);
当我在JTextArea
中输入内容时,JLabel
中的文字正在移动。我无法弄清楚如何解决这个问题。也许它们之间有一些组件?欢迎任何建议和帮助。
答案 0 :(得分:3)
这看起来像Box
计算大小和位置的工件。请注意,某些组件和布局管理器不使用setPreferredSize
,或仅将其作为提示使用,或仅将其用作计算的一部分,或等等it cannot be depended upon as a reliable method to set the size of a component。
在这种情况下,我会假设发生的事情是这样的:BoxLayout
通常使用最小/最大尺寸,而不是首选尺寸,JTextArea
的最小值/最大值是基于它的文字内容。随着文本的变化,重新计算大小,因此布局也会发生变化。
一般情况下,如果您有文字区域,则应将其放在JScrollPane
中:
Box box = new Box(BoxLayout.Y_AXIS);
JTextArea jTextArea = new JTextArea();
JScrollPane jScrollPane = new JScrollPane(jTextArea);
jScrollPane.getViewport().setPreferredSize(new Dimension(470,500));
JLabel jLabel = new JLabel();
box.add(jScrollPane);
box.add(jLabel);
这样,当JTextArea
中的文本内容发生变化时,它可以简单地完成它的操作,重新计算其大小,并从滚动窗格的一侧流出。
另见How to Use Scroll Panes,How to Use Text Areas。
根据Andrew的评论,这里有几种设置滚动窗格的初始大小的方法,这可能比明确设置视口的首选大小更可靠:
// specify rows & columns
JTextArea jTextArea = new JTextArea(20, 20);
// specify preferred scrollable viewport size
JTextArea jTextArea = new JTextArea() {
@Override
public Dimension getPreferredScrollableViewportSize() {
return new Dimension(470,500);
}
};
答案 1 :(得分:1)
jTextArea.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
jLabel.setText(jTextArea.getText());
}
});
其中,
jTextArea
- 您JTextArea
class jLabel
- 您JLabel
class 您在textarea中添加文本,标签中的文字正在更改。我想,这段代码可以帮助您确定问题。