java - JScrollPane 中的 JTabbedPane 一次仅显示一项

标签 java swing jscrollpane jtabbedpane

当我启动应用程序时,它会启动 JFrame 并加载包含 JScrollPaneJTabbedPane,但它只显示一个组件一次在里面。我已经尝试了所有方法,但仍然无法解决问题...

这是我的代码:

package test;

import java.awt.*;
import javax.swing.*;

public class Main extends JFrame{

public Main()
{
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(400,500);

    JPanel pane=new JPanel();
    pane.setLayout(new BorderLayout());
    UIManager.put("TabbedPane.contentOpaque", false);
    JTabbedPane tabbedPane=new JTabbedPane();
    JScrollPane scrollPane=new JScrollPane(pane);

    tabbedPane.setPreferredSize(new Dimension(getWidth(),getHeight()));

    for(int i = 0; i < 10; i++) pane.add(new JLabel("label22222222222222222222222222222222222222222222222222222222"+i));

   //pane.add(scrollPane,BorderLayout.CENTER);
    tabbedPane.add("Test",scrollPane);      
    add(tabbedPane);
}

public static void main(String[] args) {
    Main main=new Main();
    main.setVisible(true);
}
}

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

最佳答案

您的 Pane JPanel 使用 BorderLayout,并且您以默认方式或 BorderLayout.CENTER 添加组件。这是仅显示最后添加的组件的预期行为。

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

此外,请考虑使用 JList 而不是 JLabels 网格来显示数据。

顺便说一句,您应该格式化代码以提高可读性,而不是紧凑性。不要仅将 for 循环放在一行上。事实上,所有循环和 block 都应该放入大括号中,以防止您以后编辑代码、添加另一行并认为它不在循环中。


编辑
例如,使用 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();
         }
      });
   }
}

关于java - JScrollPane 中的 JTabbedPane 一次仅显示一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21063382/

相关文章:

java - 标题未显示在 JTable 中

java - JFreechart XYAreaChart 改变颜色

java - 从后台线程调用主线程上的函数

jquery - jScrollPane 切断内容底部

java - 显示ArrayList的表

java - 为什么我的文本字段没有出现?

java - 如何释放JScrollpane使其不总是拖到底部?

java - 如何处理 Selenium NoSuchElementException

java - 如何在 Java8 中迭代 fastutil hashmap?

java - 如何将java项目导入eclipse在tomcat服务器上运行