我的jTable没有显示任何coloumn标题

时间:2018-05-15 11:10:41

标签: java swing jtable windowbuilder jtableheader

我正在尝试在我的类MyPage中添加一个jTable,其中有一个tabbedPane。我可以在其中调用我的jTable,表格完全可见,但列标题不是。我甚至试图在scrollPane中添加我的表,但这对我没有帮助。此外,我正在使用Eclipse,我不认为有必要告诉这一点,但只是为了让所有人都知道。这是我的课程MyPage和表格中的代码

Public MyPage(){
    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    tabbedPane.setBorder(new LineBorder(new Color(0, 0, 0), 2));
    tabbedPane.setBounds(10, 122, 744, 386);
    contentPane.add(tabbedPane);

    JPanel panel_4 = new JPanel();
    tabbedPane.addTab("Customers list", null, panel_4, null);
    panel_4.setLayout(null);

    JScrollPane scrollPane = new JScrollPane();
    scrollPane.setBounds(0, 0, 735, 354);
    scrollPane.setLayout(null);

    table = new JTable();
    table.setGridColor(new Color(0, 0, 0));
    table.setBounds(10, 10, 715, 332);

    panel_4.add(scrollPane.add(table));

    conn = javaconnect.ConncrDB();
    Table(); 
    }

这是我通过它调用数据库的表条目的函数。

public void Table() {
    try {

        String sql = "select * From Balances";
        pst = conn.prepareStatement(sql);
        rs = pst.executeQuery();
        table.setModel(DbUtils.resultSetToTableModel(rs));

    } catch (Exception e) {
        JDialog dialog = new JDialog();
        dialog.setAlwaysOnTop(true);    
        JOptionPane.showMessageDialog(dialog, e );
    }finally {
        try {
            rs.close();
            pst.close();
        } catch (Exception e2) {
            JDialog dialog = new JDialog();
            dialog.setAlwaysOnTop(true);    
            JOptionPane.showMessageDialog(dialog, e2 );
        }
    }
} 

我已经尝试了在Internet上找到的所有可能的方法来解决它,但是表没有显示任何列标题,但是当我在Windows构建器设计窗口中的jTable属性中打开模型窗口时,会显示colomn标题。

1 个答案:

答案 0 :(得分:0)

  

我已尝试过在互联网上找到的所有可能的方法来解决它

期待告诉您的所有答案,不要使用null布局!

scrollPane.setLayout(null);

是您问题的关键。 JScrollPane拥有自己的布局管理器,管理员(其中包括列标题视图)

我会强烈建议您花点时间阅读Laying Out Components Within a Container,它会为您节省大量时间,并有助于防止其他许多"异常"问题

下一步...

panel_4.add(scrollPane.add(table));

不是您向JScrollPane添加组件的方式。如果您仔细查看How to Use Scroll PanesHow to Use Tables,则会显示应如何使用JScrollPane

JScrollPane是一个不寻常的容器,因为你实际上并没有添加"任何东西,相反,你"包装"其中的组成部分。

JScrollPane

我更喜欢使用构造函数来传递"视图"到JScrollPane,但您也可以使用...

scrollPane.setViewportView(table);
panel_4.add(scrollPane);

所以,有......像......

Public MyPage(){
    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    tabbedPane.setBorder(new LineBorder(new Color(0, 0, 0), 2));
    contentPane.setLayout(new BorderLayout());
    contentPane.add(tabbedPane);

    // Seems pointless, but hay
    JPanel panel_4 = new JPanel(new BorderLayout());
    tabbedPane.addTab("Customers list", panel_4);

    table = new JTable();
    table.setGridColor(new Color(0, 0, 0));
    JScrollPane scrollPane = new JScrollPane(table);

    panel_4.add(scrollPane);

    conn = javaconnect.ConncrDB();
    Table(); 
}

99.9%的问题应该消失