在 JTextArea 中键入时,JLabel 中的文本会移动
When typing into JTextArea, text in JLabel moves
我正在制作一个简单的 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
中的文字在移动。我不知道如何解决这个问题。也许他们之间有一些组成部分?欢迎任何建议和帮助。
jTextArea.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
jLabel.setText(jTextArea.getText());
}
});
其中,
jTextArea
- 你的名字对象 JTextArea
class
jLabel
- 你的名字对象 JLabel
class
您在文本区域中添加了文本,但标签中的文本正在发生变化。我认为,这段代码可以帮助您解决问题。
这看起来像是 Box
如何计算大小和位置的产物。请注意,某些组件和布局管理器不使用 setPreferredSize
,或仅将其用作提示,或仅将其用作计算的一部分,等等,因此 it cannot be depended upon as a reliable method to set the size of a component.
在这种情况下,我假设发生的事情是这样的:BoxLayout
通常使用 minimum/maximum 尺寸,而不是首选尺寸,min/max [=15] =] 是根据其文本内容计算的。随着文本的变化,大小会重新计算,因此布局也会发生变化。
一般来说,如果你有一个文本区域,你应该把它放在 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);
}
};
我正在制作一个简单的 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
中的文字在移动。我不知道如何解决这个问题。也许他们之间有一些组成部分?欢迎任何建议和帮助。
jTextArea.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
jLabel.setText(jTextArea.getText());
}
});
其中,
jTextArea
- 你的名字对象JTextArea
classjLabel
- 你的名字对象JLabel
class
您在文本区域中添加了文本,但标签中的文本正在发生变化。我认为,这段代码可以帮助您解决问题。
这看起来像是 Box
如何计算大小和位置的产物。请注意,某些组件和布局管理器不使用 setPreferredSize
,或仅将其用作提示,或仅将其用作计算的一部分,等等,因此 it cannot be depended upon as a reliable method to set the size of a component.
在这种情况下,我假设发生的事情是这样的:BoxLayout
通常使用 minimum/maximum 尺寸,而不是首选尺寸,min/max [=15] =] 是根据其文本内容计算的。随着文本的变化,大小会重新计算,因此布局也会发生变化。
一般来说,如果你有一个文本区域,你应该把它放在 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);
}
};