JTable宽度布局

时间:2016-07-26 13:28:56

标签: java layout jtable jscrollpane

我正在创建一个GUI界面来与仓库的数据库进行交互。应用程序需要将项添加到数据库,更新它们并显示它们。我在数据库中有一些表,对于每个表,我想创建一个JPanel,并将它们放在一个cardlayout中,这样我就可以使用JMenu项目在它们之间导航。每个JPanel都有相同的形式。在顶部,有一个包含文本字段,组合框等的框,用于在表格中添加项目。在这个框下面,我有一个JTable,有一行,在那之下,我在JScrollPane中有一个JTable来显示表的内容。每列的宽度必须为150,除了最后一列(宽度= 100,它将包含一个JButton进行修改)。我使用第一个JTable作为过滤器(例如,如果第一列包含'1',则第二个JTable将仅显示ID为'1'的项目)。我不知道如何为不同的JPanel选择正确的布局。目前,每个JPanel都有一个BorderLayout,每个组件都放在中心。但问题是我无法选择每列的宽度。

2 个答案:

答案 0 :(得分:1)

好吧,最后我解决了自己的问题。实际上,我需要将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(); 
    }

}

答案 1 :(得分:0)

对于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);
    }
}