将 JButton 添加到 JScrollPane
Add JButton to JScrollPame
我从 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);
}
我想做的是在 table 下面添加一个简单的组件(如 JButton),但它似乎不起作用。我尝试通过将 JButton 添加到 JPanel 并将 JPanel 添加到框架来修改代码:
JButton button = new JButton("Back");
JPanel panel = new JPanel();
panel.add(button);
f.add(sp);
f.add(panel);
但这只是删除整个 table 并用一个按钮替换它。我还尝试将按钮添加到 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。任何建议将不胜感激。提前致谢!
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 教程部分,了解更多信息和示例,了解如何使用每种不同的布局管理器来了解上述建议的差异。
编辑:
Is there a way to decrease the height of the table
如果你知道自己有一个小 table 那么你可以使用:
table.setPreferredScrollableViewportSize(table.getPreferredSize());
这将使滚动窗格的大小为 table。
然后你使用:
//f.setSize(500, 200);
f.pack();
现在所有组件都将以其首选大小显示。
我从 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);
}
我想做的是在 table 下面添加一个简单的组件(如 JButton),但它似乎不起作用。我尝试通过将 JButton 添加到 JPanel 并将 JPanel 添加到框架来修改代码:
JButton button = new JButton("Back");
JPanel panel = new JPanel();
panel.add(button);
f.add(sp);
f.add(panel);
但这只是删除整个 table 并用一个按钮替换它。我还尝试将按钮添加到 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。任何建议将不胜感激。提前致谢!
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 教程部分,了解更多信息和示例,了解如何使用每种不同的布局管理器来了解上述建议的差异。
编辑:
Is there a way to decrease the height of the table
如果你知道自己有一个小 table 那么你可以使用:
table.setPreferredScrollableViewportSize(table.getPreferredSize());
这将使滚动窗格的大小为 table。
然后你使用:
//f.setSize(500, 200);
f.pack();
现在所有组件都将以其首选大小显示。