Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JTextArea中键入时,JLabel中的文本会移动_Java_Swing_Layout Manager - Fatal编程技术网

Java 在JTextArea中键入时,JLabel中的文本会移动

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

我正在制作一个简单的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
    类的名称对象
  • 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
实际上是不好的方面做得非常糟糕。