删除JPanel之间的空间

时间:2014-10-29 13:30:32

标签: java swing user-interface jpanel spacing

我正在创建一个应用程序,以表格的形式显示来自数据库的信息。由于表中的行数可能不同,我创建了一个通用方法,该方法将创建表的一行,即表的标题或单个行。我使用JPanel这样做了。

我的问题是,每次向表中添加新行时,行之间都会有间隙。我知道我可以使用Table,但这也是我使用swing的学习经验,所以我想尽可能使用JPanel来实现这一点。

以下是创建行的方法:

public static JPanel customersTable(){

FlowLayout FlowCustTable = new FlowLayout();
FlowCustTable.setHgap(1);
FlowCustTable.setVgap(0);

JPanel customersTable = new JPanel(FlowCustTable);

JTextField surname = new JTextField();
FieldSetup(surname, 120, 25, " Surname", Color.CYAN, false);

JTextField firstname = new JTextField();
FieldSetup(firstname, 120, 25, " Firstname", Color.CYAN, false);

JTextField mobile = new JTextField();
FieldSetup(mobile, 120, 25, " Mobile", Color.CYAN, false);

JTextField homePhone = new JTextField();
FieldSetup(homePhone, 120, 25, " Home Phone", Color.CYAN, false);

JTextField address = new JTextField();
FieldSetup(address, 280, 25, " Address", Color.CYAN, false);

JTextField postcode = new JTextField();
FieldSetup(postcode, 120, 25, " Postcode", Color.CYAN, false);

customersTable.add(surname);
customersTable.add(firstname);
customersTable.add(mobile);
customersTable.add(homePhone);
customersTable.add(address);
customersTable.add(postcode);

return customersTable;

}

这是用于设置JTextfields的方法:

    public static void FieldSetup(JTextField field, int x, int y, String text, Color color, Boolean Editable){

    field.setText(text);
    field.setBackground(color);
    field.setPreferredSize(new Dimension(x, y));
    field.setEditable(Editable);
    Border border = BorderFactory.createLineBorder(Color.BLACK);
    field.setBorder(border);
    }

这是创建最终表和用户界面的方法:

public static void CustomersGui(){

final JFrame frame = new JFrame("Customers");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel customers = new JPanel();

customers.add(customersTable());

customers.add(customersTable());

frame.setContentPane(customers);

frame.setSize(1200,500);

frame.setVisible(true);
}

出于这个问题的目的,我添加了表格标题的2个实例,但同样的原则仍然适用。

我已尝试过JPanel的setHgap和setVgap,虽然这确实会影响差距,但它不会使其为零。

1 个答案:

答案 0 :(得分:0)

正如@peeskillet所指出的,面板的默认布局管理器是FlowLayout,因此你必须删除customers面板中的间隙:

FlowLayout layout = (FlowLayout)customers.getLayout();
// set gaps here....

但是,如果目标是制作网格(表格形式),那么GridLayoutGridBagLayout可能比FlowLayout更好。

另一方面,请注意,对齐放置在不同容器中的组件非常困难(我说不可能),因此当单行具有不同容器时,将每行作为不同面板的当前方法可能会遇到麻烦不同的宽度。请参阅本主题中的更详细说明:Align the label column of different DesignGridLayout