Java Swing JTabbedPane如何隐藏默认选中的Laptop标签?
解决JTabbedPane默认显示面板但隐藏对应标签的问题
直接用removeTabAt(0)会连Laptop对应的面板一起删除,导致无法显示内容。要实现默认显示Laptop面板、但隐藏该标签的效果,可用以下两种方法:
方法一:使用setVisibleAt隐藏标签
这个方法可以控制指定索引的标签是否在标签栏显示,对应的面板会被保留,且默认选中状态不受影响。
在tabbedPane.setSelectedIndex(0);之后添加一行代码:
tabbedPane.setVisibleAt(0, false);
运行后,标签栏仅显示Desktop和Notebook,程序默认展示Laptop的按钮面板,用户可正常切换到其他标签。
方法二:自定义空尺寸的标签组件
如果setVisibleAt在部分UI外观下不生效,可将Laptop的标签替换为一个没有尺寸的空组件:
tabbedPane.setSelectedIndex(0); // 替换Laptop标签为无尺寸空组件,实现隐藏效果 tabbedPane.setTabComponentAt(0, new JLabel() { @Override public Dimension getPreferredSize() { return new Dimension(0, 0); } });
修改后的完整代码示例(方法一)
package test; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class JTabbedPanel { public static void main(String args[]) { JFrame frame = new JFrame("Devices"); JTabbedPane tabbedPane = new JTabbedPane(); JTextArea text = new JTextArea(100, 100); JPanel panel1, panel2, panel3; JButton button1 = new JButton("Press Me"); button1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { System.out.println("It still works"); } }); panel1 = new JPanel(); panel1.add(button1); panel2 = new JPanel(); panel2.add(text); panel3 = new JPanel(); tabbedPane.addTab("Laptop", panel1); tabbedPane.addTab("Desktop", panel2); tabbedPane.addTab("Notebook", panel3); tabbedPane.setSelectedIndex(0); // 隐藏Laptop标签,保留面板内容 tabbedPane.setVisibleAt(0, false); frame.add(tabbedPane); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(550, 350); frame.setVisible(true); } }
两种方法都不会移除Laptop面板,仅隐藏标签栏中的对应标签,完美满足需求。
内容的提问来源于stack exchange,提问作者kohada
相关产品推荐
相关产品推荐

