JButton布局集

问题描述 投票:1回答:3

在我的代码中,我的okButton出现不好,又大又长,如何解决此问题?

public class d7Table extends JFrame {

public JTable table;
public JButton okButton;

public d7Table() {

        table = new JTable(myTableModel(res));
        okButton = new JButton("Ok");

    add(new JScrollPane(table), BorderLayout.CENTER);
    add(okButton, BorderLayout.PAGE_END);

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setSize(800, 600);
    this.setLocation(300, 60);
    this.setVisible(true);
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new d7Table();
        }
    });
}
}

我删除了不相关的代码。“在此处输入图像描述”

java swing layout jframe jbutton
3个回答
5
投票

您已将按钮添加到SOUTHBorderLayout位置。这是BorderLayout的默认行为。

要修复它,请创建另一个JPanel,向其添加按钮,然后将面板添加至SOUTH位置

看看

上面提到的方法通常称为复合布局,因为您使用具有不同布局管理器的一系列容器来实现所需的效果。

JPanel buttonPane = new JPanel(); // FlowLayout by default
JButton okayButton = new JButton("Ok");
buttonPanel.add(okayButton);
add(okayButton, BorderLayout.SOUTH);

4
投票

因为JFrame的默认布局是BorderLayout,并且PAGE_END像这样水平表示框架的底部:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9qc0FBbC5wbmcifQ==” alt =“在此处输入图像描述”>

您必须更改框架的布局,但不要这样做,只需创建一个面板,然后向其中添加组件,然后将面板添加到容器中。

JPanel p = new JPanel();
p.add(okButton);
add(p,BorderLayout.PAGE_END);

这里有些链接可以帮助您了解有关通常使用的布局管理器的更多信息:


3
投票
import java.awt.*;
import javax.swing.*;

public class TableAndButton extends JFrame {

public JTable table;
public JButton okButton;

public TableAndButton() {
    table = new JTable();
    okButton = new JButton("Ok");

    add(new JScrollPane(table), BorderLayout.CENTER);
    JPanel bottomPanel = new JPanel();
    bottomPanel.add(okButton);
    add(bottomPanel, BorderLayout.PAGE_END);

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //this.setSize(800, 600);  better to call pack()
    this.pack();
    //this.setLocation(300, 60);  better to..
    this.setLocationByPlatform(true);
    this.setVisible(true);
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new TableAndButton();
        }
    });
}
}
© www.soinside.com 2019 - 2024. All rights reserved.