JScrollPane中的JTabbedPane一次只显示一个项目

时间:2014-01-11 14:22:10

标签: java swing jscrollpane jtabbedpane

当我启动我的应用程序时,它会启动JFrame并加载包含JTabbedPane的{​​{1}},但它一次只显示其中的一个组件。我已经尝试了一切,但仍然无法解决问题......

这是我的代码:

JScrollPane

请帮助我,我不知道我做错了什么。

1 个答案:

答案 0 :(得分:2)

您的窗格JPanel使用BorderLayout,您以默认方式添加组件,或者BorderLayout.CENTER。这是仅显示添加的最后一个组件的预期行为。

您应该考虑使用其他布局,例如GridLayout。此外,Google还阅读了“在容器中布置组件”教程并了解您正在使用的布局。

另外,请考虑使用JList显示数据而不是JLabel网格。

另外,您应该格式化代码以提高可读性,而不是紧凑性。不要只在一行上放置循环。事实上,所有循环和块都应该进入大括号,以防止您以后编辑代码,添加另一行并认为它不在循环中。


修改
例如,使用JList:

import javax.swing.*;

public class Main2 {
   private static final int MAX_CELLS = 30;

   private static void createAndShowGUI() {
      final DefaultListModel<String> listModel = new DefaultListModel<>();
      final JList<String> myList = new JList<>(listModel);
      myList.setVisibleRowCount(8);

      for (int i = 0; i < MAX_CELLS; i++) {
         listModel.addElement("label22222222222222222222222222222222222222222222222222222222" + i);
      }

      JTabbedPane jTabbedPane = new JTabbedPane();

      jTabbedPane.add("Test", new JScrollPane(myList));

      JFrame frame = new JFrame("Main2");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(jTabbedPane);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGUI();
         }
      });
   }
}