[英]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
鍵入JTextArea
, JLabel
中的文本正在移動。 我不知道如何解決這個問題。 也許它們之間有一些成分? 歡迎任何建議和幫助。
這看起來像是Box
如何計算尺寸和位置的人工產物。 請注意,某些組件和布局管理器不使用setPreferredSize
,或僅將其用作提示,或僅將其用作計算的一部分,等等,因此不能依賴它作為可靠的方法來設置a的大小組件 。
在這種情況下,我假設發生的事情是這樣的: 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);
}
};
jTextArea.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
jLabel.setText(jTextArea.getText());
}
});
哪里,
jTextArea
您的JTextArea
類的名稱對象 jLabel
您的JLabel
類的名稱對象 您在文本區域中添加文本,並且標簽中的文本正在更改。 我認為,此代碼可幫助您確定問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.