将 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();

现在所有组件都将以其首选大小显示。