Java JScrollPane中的JTabbedPane一次只显示一项

Java JScrollPane中的JTabbedPane一次只显示一项,java,swing,jscrollpane,jtabbedpane,Java,Swing,Jscrollpane,Jtabbedpane,当我启动应用程序时,它启动JFrame并加载JTabbedPane,其中包含JScrollPane,但它一次只显示其中的一个组件。我什么都试过了,但还是解决不了问题 这是我的密码: package test; import java.awt.*; import javax.swing.*; public class Main extends JFrame{ public Main() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

当我启动应用程序时,它启动
JFrame
并加载
JTabbedPane
,其中包含
JScrollPane
,但它一次只显示其中的一个组件。我什么都试过了,但还是解决不了问题

这是我的密码:

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);
}
}
封装测试;
导入java.awt.*;
导入javax.swing.*;
公共类主框架{
公用干管()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
设置大小(400500);
JPanel窗格=新的JPanel();
setLayout(新的BorderLayout());
UIManager.put(“TabbedPane.content不透明”,false);
JTabbedPane tabbedPane=新的JTabbedPane();
JScrollPane scrollPane=新的JScrollPane(窗格);
setPreferredSize(新维度(getWidth(),getHeight());
对于(inti=0;i<10;i++)窗格,添加(新的JLabel(“label22222222222”+i));
//添加(滚动窗格,BorderLayout.CENTER);
添加(“测试”,滚动窗格);
添加(选项卡窗格);
}
公共静态void main(字符串[]args){
Main Main=新Main();
main.setVisible(true);
}
}

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

您的窗格JPanel使用了BorderLayout,而您正在以默认方式添加组件,即BorderLayout.CENTER。这是仅显示最后添加的组件的预期行为

你应该考虑使用另一种布局,比如GrdDay布局。此外,谷歌和阅读“在容器中布局组件”教程,了解您正在使用的布局

也可以考虑使用JLIST来显示数据而不是JLAG的网格。

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


编辑
例如,使用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();
         }
      });
   }
}
import javax.swing.*;
公共类Main2{
专用静态最终int MAX_单元=30;
私有静态void createAndShowGUI(){
final DefaultListModel listModel=新的DefaultListModel();
最终JList myList=新JList(列表模型);
myList.setVisibleRowCount(8);
对于(int i=0;i
BTW-删除
tabbedPane.setPreferredSize(新维度(getWidth(),getHeight())
设置大小(400500)&最后放置
pack()
谢谢-非常感谢您的帮助。。。我6个月前才开始编程,所以我还在学习!