gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:13:16 24 4
gpt4 key购买 nike

当我启动我的应用程序时,它会启动 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 而不是 JLabel 网格来显示数据。

顺便说一句,您应该格式化代码以提高可读性,而不是紧凑性。不要只在一行中放置 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com