我从GeeksforGeeks中获取了以下代码,该代码使用JScrollPane在JTable中显示二维数组的内容:
public class JTableExamples {
// frame
JFrame f;
// Table
JTable j;
// Constructor
JTableExamples()
{
// Frame initiallization
f = new JFrame();
// Frame Title
f.setTitle("JTable Example");
// Data to be displayed in the JTable
String[][] data = {
{ "Kundan Kumar Jha", "4031", "CSE" },
{ "Anand Jha", "6014", "IT" }
};
// Column Names
String[] columnNames = { "Name", "Roll Number", "Department" };
// Initializing the JTable
j = new JTable(data, columnNames);
j.setBounds(30, 40, 200, 300);
// adding it to JScrollPane
JScrollPane sp = new JScrollPane(j);
f.add(sp);
// Frame Size
f.setSize(500, 200);
// Frame Visible = true
f.setVisible(true);
}
我想做的是在表下添加一个简单的组件(如JButton),但它似乎不起作用。我尝试通过将JButton添加到JPanel并将JPanel添加到框架来修改代码:
JButton button = new JButton("Back");
JPanel panel = new JPanel();
panel.add(button);
f.add(sp);
f.add(panel);
但这只是删除整个表,并用一个按钮替换它。我还尝试将按钮添加到JPanel并将该JPanel添加到JScrollPane:
JButton button = new JButton("Back");
JPanel panel = new JPanel();
panel.add(button);
sp.add(panel);
f.add(sp);
但这似乎并没有改变任何东西。我还尝试修改JScrollPanel的首选和最大大小,但无济于事-它始终占据整个屏幕,并阻止JButton出现在屏幕上。
这里不打算进行设计,而只是功能:在我的JTable下面出现一个JButton。任何建议将不胜感激。预先谢谢你!
答案 0 :(得分:1)
JFrame的默认布局管理器是BorderLayout
。
f.add(sp);
f.add(panel);
当您未为BorderLayout
指定约束时,将假定CENTER
。您只能将一个组件添加到CENTER
。
您的代码应该是:
f.add(sp, BorderLayout.CENTER);
f.add(panel, BorderLayout.PAGE_END);
请注意,JPanel
的默认布局管理器是FlowLayout
。因此按钮将在面板中水平居中。
也可以尝试将按钮直接添加到框架的PAGE_END
中,以查看区别,而不是使用JPanel。
请阅读Using Layout Manager上Swing教程中的部分,以获取更多信息和示例,这些示例和示例使用每个不同的布局管理器来理解上述建议的差异。
编辑:
有没有一种方法可以减小桌子的高度
如果您知道自己有一张小桌子,则可以使用:
table.setPreferredScrollableViewportSize(table.getPreferredSize());
这将使滚动窗格具有表的大小。
然后使用:
//f.setSize(500, 200);
f.pack();
现在所有组件将以其首选大小显示。