JTable宽度布局
JTable width layout
我正在创建一个 GUI 界面来与仓库的数据库进行交互。应用程序需要向数据库添加项目、更新它们并显示它们。我在数据库中有一些 table,对于每个 table,我想创建一个 JPanel,并将它们放在卡片布局中,这样我就可以使用 JMenu 项目在它们之间导航。每个 JPanel 都有相同的表单。在顶部,有一个带有文本字段、组合框等的框,用于在 table 中添加项目。在框下方,我有一个包含 1 行的 JTable,在其下方,我在 JScrollPane 中有一个 JTable 来显示 table 的内容。除了最后一列(width=100,它将包含一个用于修改的 JButton)外,每一列的宽度都需要为 150。我使用第一个 JTable 作为过滤器(例如,如果第一列包含“1”,那么第二个 JTable 将只显示 ID 以“1”开头的项目)。我不知道如何为不同的 JPanel 选择正确的布局。目前,每个 JPanel 都有一个 BorderLayout,每个组件都位于中心。但问题是我无法选择每一列的宽度。
对于jTable,您可以设置列的大小。
可能下面的示例可能会有所帮助。如果这就是您要找的,请告诉我!
TableColumn column = null;
for (int i = 0; i < 3; i++) {
column = table.getColumnModel().getColumn(i);
if (i == 2) {
column.setPreferredWidth(100); //sport column is bigger
} else {
column.setPreferredWidth(50);
}
}
好吧,我终于解决了自己的问题。实际上,我需要将 JTable 放在 JPanel 中,将 JPanel 放在 JScrollPane 中。这是代码:
public class Brouillon extends JFrame {
public Brouillon() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel jpContent = new JPanel();
JPanel jpCards = new JPanel();
jpContent.setLayout(new BoxLayout(jpContent, BoxLayout.PAGE_AXIS));
CardLayout clSelect = new CardLayout();
jpCards.setLayout(clSelect);
JButton jbTest = new JButton();
jbTest.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
clSelect.next(jpCards);
}
});
jpContent.add(jbTest);
JPanel jpContainer1 = new JPanel();
JTable jtData1 = new JTable(new Object[2][3], new String[] {"1", "2", "3"});
jtData1.getColumnModel().getColumn(0).setPreferredWidth(150);
jtData1.getColumnModel().getColumn(1).setPreferredWidth(150);
jtData1.getColumnModel().getColumn(2).setPreferredWidth(50);
JPanel jpTemp1 = new JPanel();
jpTemp1.setLayout(new BorderLayout());
jpTemp1.add(jtData1.getTableHeader(), BorderLayout.NORTH);
jpTemp1.add(jtData1, BorderLayout.CENTER);
JScrollPane jspData1 = new JScrollPane(jpTemp1);
jpContainer1.add(jspData1);
JPanel jpContainer2 = new JPanel();
JTable jtData2 = new JTable(new Object[2][7], new String[] {"1", "2", "3", "4", "5", "6", "7"});
jtData2.getColumnModel().getColumn(0).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(1).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(2).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(3).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(4).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(5).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(6).setPreferredWidth(50);
JPanel jpTemp2 = new JPanel();
jpTemp2.setLayout(new BorderLayout());
jpTemp2.add(jtData2, BorderLayout.CENTER);
jpTemp2.add(jtData2.getTableHeader(), BorderLayout.NORTH);
JScrollPane jspData2 = new JScrollPane(jpTemp2);
jpContainer2.add(jspData2);
jpCards.add(jpContainer2);
jpCards.add(jpContainer1);
jpContent.add(jpCards);
this.getContentPane().add(jpContent);
this.pack();
this.setVisible(true);
}
public static void main(String[] args) {
new Brouillon();
}
}
我正在创建一个 GUI 界面来与仓库的数据库进行交互。应用程序需要向数据库添加项目、更新它们并显示它们。我在数据库中有一些 table,对于每个 table,我想创建一个 JPanel,并将它们放在卡片布局中,这样我就可以使用 JMenu 项目在它们之间导航。每个 JPanel 都有相同的表单。在顶部,有一个带有文本字段、组合框等的框,用于在 table 中添加项目。在框下方,我有一个包含 1 行的 JTable,在其下方,我在 JScrollPane 中有一个 JTable 来显示 table 的内容。除了最后一列(width=100,它将包含一个用于修改的 JButton)外,每一列的宽度都需要为 150。我使用第一个 JTable 作为过滤器(例如,如果第一列包含“1”,那么第二个 JTable 将只显示 ID 以“1”开头的项目)。我不知道如何为不同的 JPanel 选择正确的布局。目前,每个 JPanel 都有一个 BorderLayout,每个组件都位于中心。但问题是我无法选择每一列的宽度。
对于jTable,您可以设置列的大小。 可能下面的示例可能会有所帮助。如果这就是您要找的,请告诉我!
TableColumn column = null;
for (int i = 0; i < 3; i++) {
column = table.getColumnModel().getColumn(i);
if (i == 2) {
column.setPreferredWidth(100); //sport column is bigger
} else {
column.setPreferredWidth(50);
}
}
好吧,我终于解决了自己的问题。实际上,我需要将 JTable 放在 JPanel 中,将 JPanel 放在 JScrollPane 中。这是代码:
public class Brouillon extends JFrame {
public Brouillon() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel jpContent = new JPanel();
JPanel jpCards = new JPanel();
jpContent.setLayout(new BoxLayout(jpContent, BoxLayout.PAGE_AXIS));
CardLayout clSelect = new CardLayout();
jpCards.setLayout(clSelect);
JButton jbTest = new JButton();
jbTest.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
clSelect.next(jpCards);
}
});
jpContent.add(jbTest);
JPanel jpContainer1 = new JPanel();
JTable jtData1 = new JTable(new Object[2][3], new String[] {"1", "2", "3"});
jtData1.getColumnModel().getColumn(0).setPreferredWidth(150);
jtData1.getColumnModel().getColumn(1).setPreferredWidth(150);
jtData1.getColumnModel().getColumn(2).setPreferredWidth(50);
JPanel jpTemp1 = new JPanel();
jpTemp1.setLayout(new BorderLayout());
jpTemp1.add(jtData1.getTableHeader(), BorderLayout.NORTH);
jpTemp1.add(jtData1, BorderLayout.CENTER);
JScrollPane jspData1 = new JScrollPane(jpTemp1);
jpContainer1.add(jspData1);
JPanel jpContainer2 = new JPanel();
JTable jtData2 = new JTable(new Object[2][7], new String[] {"1", "2", "3", "4", "5", "6", "7"});
jtData2.getColumnModel().getColumn(0).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(1).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(2).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(3).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(4).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(5).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(6).setPreferredWidth(50);
JPanel jpTemp2 = new JPanel();
jpTemp2.setLayout(new BorderLayout());
jpTemp2.add(jtData2, BorderLayout.CENTER);
jpTemp2.add(jtData2.getTableHeader(), BorderLayout.NORTH);
JScrollPane jspData2 = new JScrollPane(jpTemp2);
jpContainer2.add(jspData2);
jpCards.add(jpContainer2);
jpCards.add(jpContainer1);
jpContent.add(jpCards);
this.getContentPane().add(jpContent);
this.pack();
this.setVisible(true);
}
public static void main(String[] args) {
new Brouillon();
}
}