展开JTable大小以填充JPanel

时间:2017-12-06 23:15:02

标签: java swing user-interface jtable

我试图创建一个程序,显示一个包含数据的表,称为时间日志程序。我无法扩展Jtable来填充JPanel,因为它目前看起来像这样:

Huge white gap 您可以在表格下方看到巨大的白色间隙,但我希望这些行在空间中均匀分布。

以下是我的代码。

这是一个我称之为TimeLogApplication的类,它有main方法并创建一个JFrame。

public static void main(String[] args) {

    /* Create a new frame */
    JFrame guiFrame = new JFrame("Time Log Program");

    /* Set size of the frame */
    guiFrame.setSize(FRAME_WIDTH, FRAME_HEIGHT);

    /* Add the panel */
    guiFrame.add(new TimeLogPanel());

    /* Exit normally on closing the window */
    guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    /* Show the frame */
    guiFrame.setVisible(true);
}

JFrame调用创建JPanel的TimeLogPanel类。此面板具有边框布局。该表将添加到中心面板,该面板也具有边框布局。

public TimeLogPanel() {

    // Set layout, add table panel
    setLayout(new BorderLayout(20, 20));
    add(tablePanel);

    // Create table panel and set layout
    tablePanel = new JPanel();
    tablePanel.setLayout(new BorderLayout());

    // Create a new table with row and column number
    table = new JTable(rowNum, colNum); 
    table.setShowGrid(true);
    table.setGridColor(Color.BLACK);

    // Set a raised border
    table.setBorder(new EtchedBorder(EtchedBorder.RAISED));

    // Add table to table panel
    tablePanel.add(table);      
}

我试图获得面板高度,但由于在创建框架之前未创建,因此面板高度为零。

提前感谢任何建议!

更新: 我尝试了这些建议并且效果很好(将ComponentListener添加到保存JTable的JPanel中)。这就是我所做的:

tablePanel.addComponentListener(new ComponentListener() {

        @Override
        public void componentResized(ComponentEvent e) {
                tablePanelSize = tablePanel.getHeight();
                table.setRowHeight(tablePanel.getHeight()/rowNum); //RowNum is the number of rows
        }

        // Below methods are not used but must be there, as a requirement when adding a listener
        @Override
        public void componentMoved(ComponentEvent e) {          
        }

        @Override
        public void componentShown(ComponentEvent e) {              
        }

        @Override
        public void componentHidden(ComponentEvent e) {             
        }           
    });

1 个答案:

答案 0 :(得分:2)

我认为您必须添加ComponentListenercomponentResized事件),计算行高,然后调用JTable.setRowHeight