我制作了一个简单的swing程序来显示“文本区域”和它下面的一个按钮,但是即使使用setBounds()之后,该按钮也会在整个Frame上显示。这是我的代码-

import javax.swing.*;

class Exp2
{
  public static void main(String... s)
  {
    JFrame jf=new JFrame("Exec");
    JTextArea jtv=new JTextArea("Hello World");
    jtv.setBounds(5,5,100,60);
    JButton jb=new JButton("click");
    jb.setBounds(40,160,100,60);
    jf.add(jtv);
    jf.add(jb);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setSize(500,500);
    jf.setResizable(false);
    jf.setVisible(true);
  }
}


After Execution of code

最佳答案

不要使用setBounds()。 Swing旨在与布局管理器一起使用。

框架的默认布局管理器是BorderLayout。因此,您不能仅将按钮直接添加到框架中。

相反,您的逻辑应类似于:

JButton button = new JButton(...);
JPanel wrapper = new JPanel();
wrapper.add(button);
frame.add(wrapper, BorderLayout.PAGE_START);


JPanel的默认布局是FlowLayout,它将以其首选大小显示按钮。

阅读关于Layout Manager的Swing教程中的部分,以获取有关BorderLayoutFlowLayout的更多信息。

09-29 19:40