1

在我的代码中,My okButtonis bad 出现,又大又长,如何解决这个问题?

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();
        }
    });
}
}

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

4

3 回答 3

5

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

要修复它,请创建另一个JPanel,将您的按钮添加到其中,然后将面板添加到该SOUTH位置

看一眼

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

JPanel buttonPane = new JPanel(); // FlowLayout by default
JButton okayButton = new JButton("Ok");
buttonPanel.add(okayButton);
add(okayButton, BorderLayout.SOUTH);
于 2013-07-21T21:35:36.850 回答
4

因为默认布局JFrameBorderLayout, 和PAGE_END意味着框架的底部水平像这样:

在此处输入图像描述

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

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

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

于 2013-07-21T21:35:18.643 回答
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();
        }
    });
}
}
于 2013-07-21T21:43:28.897 回答