簡體   English   中英

鍵入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鍵入JTextAreaJLabel中的文本正在移動。 我不知道如何解決這個問題。 也許它們之間有一些成分? 歡迎任何建議和幫助。

這看起來像是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM