扩展 JTable 大小以填充 JPanel
Expand JTable size to fill JPanel
我正在尝试创建一个程序来显示 table 上的数据,称为时间日志程序。我无法扩展 Jtable 来填充 JPanel,因为它目前看起来像这样:
您可以看到 table 下方的巨大白色间隙,但我希望这些行在 space.
之间均匀分布
下面是我的代码。
这是一个 class 我调用的 TimeLogApplication,它有主要方法并创建了一个 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 class。这个面板有一个边框布局。 table 被添加到中心面板,它也有边框布局。
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) {
}
});
我认为你必须添加一个ComponentListener
(componentResized
事件),计算行高然后调用JTable.setRowHeight
。
我正在尝试创建一个程序来显示 table 上的数据,称为时间日志程序。我无法扩展 Jtable 来填充 JPanel,因为它目前看起来像这样:
下面是我的代码。
这是一个 class 我调用的 TimeLogApplication,它有主要方法并创建了一个 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 class。这个面板有一个边框布局。 table 被添加到中心面板,它也有边框布局。
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) {
}
});
我认为你必须添加一个ComponentListener
(componentResized
事件),计算行高然后调用JTable.setRowHeight
。