Java 在JTextArea中键入时,JLabel中的文本会移动
我正在制作一个简单的GUI,但遇到了一个问题。 这是我的代码:Java 在JTextArea中键入时,JLabel中的文本会移动,java,swing,layout-manager,Java,Swing,Layout Manager,我正在制作一个简单的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); JTextA
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
中的文本正在移动。我想不出怎么解决这个问题。也许他们之间有什么关系?欢迎任何建议和帮助
jTextArea.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
jLabel.setText(jTextArea.getText());
}
});
在哪里,
-您的jTextArea
类的名称对象jTextArea
-您的名字对象的jLabel
类jLabel
-您的jTextArea
类的名称对象jTextArea
-您的名字对象的jLabel
类jLabel
在文本区域中添加文本,标签中的文本正在更改。我认为,这段代码可以帮助您解决问题。这看起来像是
框如何计算大小和位置的人工制品。请注意,某些组件和布局管理器不使用setPreferredSize
,或仅将其作为提示,或仅将其用作计算的一部分,等等
在这种情况下,我会假设所发生的事情是这样的: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
中的文本内容发生变化时,它可以简单地完成它的工作,重新计算它的大小,并从滚动窗格的侧面流出
另见
根据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);
}
};
这看起来像是框
如何计算大小和位置的人工制品。请注意,某些组件和布局管理器不使用setPreferredSize
,或仅将其作为提示,或仅将其用作计算的一部分,等等
在这种情况下,我会假设所发生的事情是这样的: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
中的文本内容发生变化时,它可以简单地完成它的工作,重新计算它的大小,并从滚动窗格的侧面流出
另见
根据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) 为了更快地获得更好的帮助,可以发布一个(最小完整的可验证示例)或(简短、自包含、正确的示例)。2) 请参阅(是的。)1)更快地获得更好的帮助,发布(最简单的完整可验证示例)或(简短、自包含、正确的示例)。2) 请参阅(是)JTextArea JTextArea=new JTextArea()。。jScrollPane.getViewport().setPreferredSize(新维度(470500))代码>应该是(根据需要调整数字)JTextArea JTextArea=新的JTextArea(4,20)代码>请参阅(是的)@AndrewThompson谢谢您的建议。这样做的实际原因是JTextArea
行和列(显然,我不得不去检查)被JScrollPane
间接用于计算其大小。你链接到的Q&A没有说这一点,坦率地说,它在解释为什么setPreferredSize
实际上是不好的方面做得非常糟糕。JTextArea JTextArea=new JTextArea()。。jScrollPane.getViewport().setPreferredSize(新维度(470500))代码>应该是(根据需要调整数字)JTextArea JTextArea=新的JTextArea(4,20)代码>请参阅(是的)@AndrewThompson谢谢您的建议。这样做的实际原因是JTextArea
行和列(显然,我不得不去检查)被JScrollPane
间接用于计算其大小。你链接到的Q&A没有这样说,坦白地说,它在解释为什么setPreferredSize
实际上是不好的方面做得非常糟糕。