Java Swing: 如何将多个JPanel添加到JScrollPane中

3

我在网上阅读到,要将组件添加到JscrollPane中,我们必须执行以下操作:

scrollPane.getViewport().setView(jpanel);

这是我的代码。为了显示多个组件,例如JButtons,我试图将它们添加到多个JPanels中,并在最后按顺序将它们添加进去。但只有最后一个JPanel被显示出来了。为什么呢?

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;

import layout.TableLayout;

public class Main {

  public static void main(String argv[]) {

      JFrame jframe = new JFrame("Protocollo UTL");
      jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      jframe.setSize(1200, 450);

      JPanel body = new JPanel();
      double[][] size = {
            {0.05},
            {0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05}

      };

      body.setLayout(new TableLayout(size));

      for(int i=0; i<19; i++) {
          body.add(new JButton(String.valueOf(i)), "0,"+String.valueOf(i));
      }

      JPanel body2 = new JPanel();
      body2.setLayout(new TableLayout(size));


      for(int j=0; j<6; j++) {
          body2.add(new JButton(String.valueOf(j)), "0,"+String.valueOf(j));
      }

      JScrollPane scrollPane = new JScrollPane(body,
              ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
              ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);

      scrollPane.getViewport().setView(body);
      scrollPane.getViewport().setView(body2);

      jframe.add(scrollPane);
      jframe.setVisible(true);

  }

}
1个回答

2
您正在使用第二条语句覆盖第一条语句。
scrollPane.getViewport().setView(body);
scrollPane.getViewport().setView(body2);

您应该将这两个JPanel添加到某个父组件中,并将该组件设置为视图。像这样:
Container cont = new Container();
cont.add(body);
cont.add(body2);
scrollPane.getViewport().setView(cont);

编辑

我认为你根本不需要那行代码 (setView(...))。试试这个(将其替换成最后四行)。

  Container cont = new Container();
  cont.add(scrollPane);
  cont.add(body2);
  cont.setLayout(new GridLayout());

  jframe.add(cont);
  jframe.setVisible(true);

我不想覆盖它,我只想在第一个JPanel下面添加另一个JPanel。怎么做? - SagittariusA
很抱歉,但似乎它不起作用。现在我在Jpanel中什么也看不到... :( - SagittariusA
1
抱歉,请检查我的第二次编辑。我刚试了一下,它可以工作(至少显示了一些东西),希望这接近你想要的。 - Predrag Maric
那很好,但是JPanels被放置并显示在彼此旁边,而我需要它们被放置在彼此下面...对我的混乱感到抱歉:( - SagittariusA
1
new GridLayout() 改为 new GridLayout(2, 1),它应该可以工作。其中 2 是行数,1 是列数。 - Predrag Maric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接