[英]JTable resizes according to ScrollPane's size
當我調整包含JTable的窗口的大小時,我試圖使JTable自動調整其大小。
如以下示例所示: http : //docs.oracle.com/javase/tutorial/uiswing/examples/components/SimpleTableDemoProject/src/components/SimpleTableDemo.java
JTable將調整其寬度,如果高度太小而無法顯示全部內容,則JTable還將在右側具有滾動條。
這是JFrame,我使用單獨的類擴展了JPanel:
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的寬度不會調整大小,而且我似乎也無法在右側獲得滾動條
考慮改用BorderLayout
...
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));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.