Java GUI 新手。我一直在浏览 stackoverflow,但仍然不明白 JTables 是如何工作的。我可以完美地获取数据,但我无法弄清楚为什么列标题没有显示,以及如何将表格调整大小/位置到框架中的另一个位置。我一直在阅读有关使用 JScrollPane 的信息,我可能使用不正确。感谢您的帮助。
String[] columnNames = {"Date","Field", "Home Team","Visitor Team", "Score"};
JFrame guiFrame = new JFrame();
guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
guiFrame.setTitle("Soccer Schedule");
guiFrame.setSize(500,500);
guiFrame.setLocationRelativeTo(null);
JPanel panel = new JPanel();
panel.setSize(450, 450);
JLabel titleLabel = new JLabel("Real Tired");
String[][] data = createTableContents(scheduleCsv);
JTable scheduleTable = new JTable(data,columnNames);
JScrollPane scrollPane = new JScrollPane(scheduleTable);
panel.add(scrollPane);
panel.add(titleLabel);
panel.add(scheduleTable);
guiFrame.add(panel);
guiFrame.setVisible(true);
最佳答案
问题不在于表格或 jscrollpane,而在于如何将它们放入面板中:
panel.add(scrollPane);
panel.add(titleLabel);
panel.add(scheduleTable);
首先,scheduleTable(视觉上)位于scrollPane内部,因此您只需放置scrollPane,而不是再次放置表格。所以我们想要:
panel.add(titleLabel); //first put the title
panel.add(scrollPane);
这很好用:
当我说它工作得很好时,我的意思是它工作得很好......偶然。当您增大窗口时,就会发现元素的真实布局:
问题又出现在这段代码中:
panel.add(titleLabel); //first put the title
panel.add(scrollPane);
这肯定会将组件(标签和滚动 Pane )添加到面板中,但是明显的问题是“面板中的何处添加它们?”。
那么答案是面板有一个 LayoutManager这决定了其组件的位置。其中有几个,你必须选择一个,了解它的工作原理并使用它,看看这个 visual guide .
由于您没有指定布局,panel
使用面板的默认布局 FlowLayout
,它将组件一个接一个地并排放置。
查看教程选择一个布局,然后使用它。例如,我可以使用这样的 BorderLayout:
JPanel panel = new JPanel(new BorderLayout());
...
panel.add(titleLabel, BorderLayout.NORTH);
panel.add(scrollPane, BorderLayout.CENTER);
给予:
完整代码:
String[] columnNames = {"Date","Field", "Home Team","Visitor Team", "Score"};
JFrame guiFrame = new JFrame(); //no layout specified, frames use BorderLayout by default
guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
guiFrame.setTitle("Soccer Schedule");
guiFrame.setSize(500,500);
guiFrame.setLocationRelativeTo(null);
JPanel panel = new JPanel(new BorderLayout());
panel.setSize(450, 450);
JLabel titleLabel = new JLabel("Real Tired");
//String[][] data = createTableContents(scheduleCsv);
//my test data
String[][] data = new String[1][5];
for (int i = 0; i < 5; ++i)
{
data[0][i] = "cell " + i;
}
JTable scheduleTable = new JTable(data,columnNames);
JScrollPane scrollPane = new JScrollPane(scheduleTable);
panel.add(titleLabel, BorderLayout.NORTH);
panel.add(scrollPane, BorderLayout.CENTER);
guiFrame.add(panel); //this is actually guiFrame.add(panel, BorderLayout.CENTER);
guiFrame.setVisible(true);
关于Java JTable 列标题未显示 - JScrollPane?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22463157/