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个月前才开始编程,所以我还在学习!