Java JTable根据滚动窗格调整大小';s码
我试图让JTable在调整包含JTable的窗口大小时自动调整其大小 如下例所示: JTable将调整其宽度,如果高度太小而无法全部显示,则它在右侧有一个滚动条 这是JFrame,我使用单独的类扩展JPanel:Java JTable根据滚动窗格调整大小';s码,java,jtable,scrollpane,Java,Jtable,Scrollpane,我试图让JTable在调整包含JTable的窗口大小时自动调整其大小 如下例所示: JTable将调整其宽度,如果高度太小而无法全部显示,则它在右侧有一个滚动条 这是JFrame,我使用单独的类扩展JPanel: public class GUIFrame { public static void main(String[] args) { //Setting up JFrame's basic properties JFrame mainFrame = new JFra
public class GUIFrame
{
public static void main(String[] args)
{
//Setting up JFrame's basic properties
JFrame mainFrame = new JFrame("Muney Manager");
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Setting up panels:
JPanel mPanel = new JPanel();
mPanel.setLayout(new BoxLayout(mPanel,BoxLayout.PAGE_AXIS));
TablePanel tPanel = new TablePanel();
ToolBar buttonPanel = new ToolBar(tPanel);
mPanel.add(buttonPanel);
mPanel.add(tPanel);
//Setting up Panels and Frame to be displayed :3
mainFrame.getContentPane().add(mPanel);
mainFrame.pack();
mainFrame.setVisible(true);
}
这是一个包含JTable的表:
public class TablePanel extends JPanel
{
//DefaultTableModel is needed for adding new rows
private JTable table;
private DefaultTableModel tmodel;
private JScrollPane scrollPane;
//Table's column name
private String[] columnNames = {"Date",
"Category",
"Details",
"Add/Subtract",
"Total"};
Object[][] data = {
{20140925, "Grocery", "Supermarket", -5.23,600.00},
{20141013,"Car Maintenance", "Changing Tires", -200.00, 400.00}
};
public TablePanel()
{
//Initializing tmodel and putting it into table
//It's needed for "adding rows" method
tmodel = new DefaultTableModel(data, columnNames);
table = new JTable();
table.setModel(tmodel);
//Setting up JScrollPane, table Headder
//and make scrollPane visible
table.setFillsViewportHeight(true);
add(new JScrollPane(table));
}
由于某种原因,我无法让它工作,我的代码怎么了?
JTable宽度没有调整大小,而且我似乎无法在右侧获得滚动条
考虑使用
边框布局来代替
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame mainFrame = new JFrame("Muney Manager");
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Setting up panels:
JPanel mPanel = new JPanel();
mPanel.setLayout(new BorderLayout());
TablePanel tPanel = new TablePanel();
ToolBar buttonPanel = new ToolBar(tPanel);
mPanel.add(buttonPanel, BorderLayout.NORTH);
mPanel.add(tPanel);
//Setting up Panels and Frame to be displayed :3
mainFrame.getContentPane().add(mPanel);
mainFrame.pack();
mainFrame.setVisible(true);
}
});
}
或者,如果您想要更多的控制,甚至可以使用GridBagLayout
已更新
JPanel
默认情况下使用FlowLayout
,请尝试将TablePanel
更改为使用BorderLayout
public TablePanel()
{
setLayout(new BorderLayout());
//Initializing tmodel and putting it into table
//It's needed for "adding rows" method
tmodel = new DefaultTableModel(data, columnNames);
table = new JTable();
table.setModel(tmodel);
//Setting up JScrollPane, table Headder
//and make scrollPane visible
table.setFillsViewportHeight(true);
add(new JScrollPane(table));
}
为什么不使用BorderLayout
而不是BoxLayout
?就我的计划目标而言,我认为BoxLayout会更简单。使用BorderLayout是否解决问题?BorderLayout
将导致位于中心位置的组件占据容器可用空间的全部内容。北方的NORTH
组件将被扩展以填充水平空间。我刚刚尝试了你发布的新代码,不知怎么的,它不起作用,也没有任何更改。但是,如果我直接将tPanel添加到大型机中,我发现了一件事:mainFrame.getContentPane().add(tPanel);TablePanel中的JTable仍然没有改变大小,我相信它与TablePanel有关,而不是与布局管理器有关。