Java Swing JFrame布局

Dan*_*lin 11 java swing jframe jbutton layout-manager

我刚刚编写了一个简单的代码,我希望在主框架上显示一个文本字段和一个按钮,但是在运行之后,我看到的是文本字段.

如果我在文本字段后面写了按钮的代码,那么只显示按钮.

知道为什么吗?

    JFrame mainframe=new JFrame();
    mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainframe.setBounds(0,0,200,200);
    JButton jb=new JButton();
    jb.setText("Leech");
    mainframe.add(jb);
    JTextField link=new JTextField(50);
    mainframe.add(link);
    mainframe.pack();
    mainframe.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

Rob*_*bin 11

a上的默认布局JFrame是a BorderLayout.使用这样的布局调用add方法Container等同于调用add(..., BorderLayout.CENTER).BorderLayout罐的每个位置仅包含一个元素.因此打两个电话

mainframe.add(jb);
mainframe.add(link);
Run Code Online (Sandbox Code Playgroud)

导致包含您添加的最后一个组件的CENTER.如果要避免这种情况,可以将其添加到其他位置,或者FlowLayout通过调用使用其他布局管理器(例如a )JFrame#setLayout


Hei*_*bug 9

而不是直接将组件添加到JFrame,使用JPanel作为具有所需LayoutManager的容器.

在这里,您可以找到有关布局管理器的几个教程.

基本上在Swing中,LayoutManager负责布置子组件(确定它们的位置和大小),因此您在应用程序中使用的每个容器组件都应配置适当的LayoutManager.

  • LayoutManager 上的链接现已失效。请修复。 (2认同)

Ibr*_*him 5

将组件添加到JPanel,然后将该面板添加到JFrame的ContentPane.

JFrame window = new JFrame();
JPanel mainframe = new JPanel();

window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBounds(0,0,200,200);

JButton jb = new JButton();
jb.setText("Leech");

mainframe.add(jb);

JTextField link = new JTextField(50);
mainframe.add(link);

window.getContentPane().add(mainframe);
window.pack();
window.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

  • 这与在`JFrame`上设置`FlowLayout`为`LayoutManager`基本相同,因为那是`JPanel`的默认布局 (4认同)