Java 将JButton添加到JScrollPame

Java 将JButton添加到JScrollPame,java,swing,jtable,jscrollpane,Java,Swing,Jtable,Jscrollpane,以下代码取自Geeksforgeks,它使用JScrollPane在JTable中显示二维数组的内容: public class JTableExamples { // frame JFrame f; // Table JTable j; // Constructor JTableExamples() { // Frame initiallization f = new JFrame(); // Frame Title f.setTitl

以下代码取自Geeksforgeks,它使用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 button = new JButton("Back");
   JPanel panel = new JPanel();
   panel.add(button);
   sp.add(panel);
   f.add(sp);
我试图做的是在表下面添加一个简单的组件(比如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:

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 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); 
如果未为
边界布局指定约束,则假定
中心
。只能将单个组件添加到
中心

相反,您的代码应该是:

f.add(sp, BorderLayout.CENTER);
f.add(panel, BorderLayout.PAGE_END); 
注意
JPanel的默认布局管理器是
FlowLayout
。因此,按钮将在面板中水平居中

另外,不要使用JPanel,试着直接将按钮添加到框架的
页面末尾
,以查看差异

阅读Swing教程中关于的部分,以获取更多信息和示例,使用每个不同的布局管理器来理解上述建议的差异

编辑:

有没有办法降低桌子的高度

如果您知道您有一张小桌子,那么您可以使用:

table.setPreferredScrollableViewportSize(table.getPreferredSize());
这将使滚动窗格与表的大小相同

然后使用:

//f.setSize(500, 200); 
f.pack();

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

JFrame的默认布局管理器是
BorderLayout

f.add(sp);
f.add(panel); 
如果未为
边界布局指定约束,则假定
中心
。只能将单个组件添加到
中心

相反,您的代码应该是:

f.add(sp, BorderLayout.CENTER);
f.add(panel, BorderLayout.PAGE_END); 
注意
JPanel的默认布局管理器是
FlowLayout
。因此,按钮将在面板中水平居中

另外,不要使用JPanel,试着直接将按钮添加到框架的
页面末尾
,以查看差异

阅读Swing教程中关于的部分,以获取更多信息和示例,使用每个不同的布局管理器来理解上述建议的差异

编辑:

有没有办法降低桌子的高度

如果您知道您有一张小桌子,那么您可以使用:

table.setPreferredScrollableViewportSize(table.getPreferredSize());
这将使滚动窗格与表的大小相同

然后使用:

//f.setSize(500, 200); 
f.pack();

现在,所有组件都将按其首选尺寸显示。

工作非常出色,非常感谢!最后一个问题:按钮现在出现在页面的最底部(我猜这就是page_END所做的),而(大部分)空表继续占据几乎整个页面。有没有办法降低桌子的高度(去掉空的空间)并“举起”按钮?我猜这就是PAGE_END所做的-不要猜!这就是为什么我给了你Swing教程的链接。本教程解释了各种约束对每个布局管理器的意义。见编辑。工作很有魅力,非常感谢!最后一个问题:按钮现在出现在页面的最底部(我猜这就是page_END所做的),而(大部分)空表继续占据几乎整个页面。有没有办法降低桌子的高度(去掉空的空间)并“举起”按钮?我猜这就是PAGE_END所做的-不要猜!这就是为什么我给了你Swing教程的链接。本教程解释了各种约束对每个布局管理器的意义。请参见编辑。