将JButton添加到JScrollPame

时间:2019-07-10 23:53:20

标签: swing jtable jscrollpane

我从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。任何建议将不胜感激。预先谢谢你!

1 个答案:

答案 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();

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