我正在创建一个应用程序,以表格的形式显示来自数据库的信息。由于表中的行数可能不同,我创建了一个通用方法,该方法将创建表的一行,即表的标题或单个行。我使用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,虽然这确实会影响差距,但它不会使其为零。
答案 0 :(得分:0)
正如@peeskillet所指出的,面板的默认布局管理器是FlowLayout,因此你必须删除customers
面板中的间隙:
FlowLayout layout = (FlowLayout)customers.getLayout();
// set gaps here....
但是,如果目标是制作网格(表格形式),那么GridLayout或GridBagLayout可能比FlowLayout
更好。
另一方面,请注意,对齐放置在不同容器中的组件非常困难(我说不可能),因此当单行具有不同容器时,将每行作为不同面板的当前方法可能会遇到麻烦不同的宽度。请参阅本主题中的更详细说明:Align the label column of different DesignGridLayout