Java Swing:将选项卡添加到 JPanels

Posted

技术标签:

【中文标题】Java Swing:将选项卡添加到 JPanels【英文标题】:Java Swing: Add tabs into JPanels 【发布时间】:2013-02-08 14:08:19 【问题描述】:

我有一系列选项卡,但我想在它显示的面板中添加更多选项卡,就像复制功能区菜单一样。我大致知道需要做什么(更改 makeTextPanel 函数的返回类型),但不知道如何做,因此不胜感激。

package components;

import javax.swing.JTabbedPane;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;

public class ribbonMenu extends JPanel 
        public ribbonMenu() 
                super(new GridLayout(1,1));

                JTabbedPane tabbedPane = new JTabbedPane();

                JTabbedPane tabbedPane2 = new JTabbedPane();

                JComponent panel1 = makeTextPanel("Panel #1");
                tabbedPane.addTab("Tab 1", panel1);
                panel1.setPreferredSize(new Dimension(600, 400));

                JComponent panel2 = makeTextPanel("Panel #2");
                tabbedPane.addTab("Tab 2", panel2);

                JComponent panel3 = makeTextPanel("Panel #3");
                tabbedPane.addTab("Tab 3", panel3);

                add(tabbedPane);

                tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);           
        

        protected JComponent makeTextPanel (String text) 
                JPanel panel = new JPanel(false);
                JLabel filler = new JLabel(text);
                filler.setHorizontalAlignment(JLabel.CENTER);
                panel.setLayout (new GridLayout(1,1));
                panel.add(filler);
                return panel;
        

        private static void createAndShowGUI() 
            JFrame frame = new JFrame ("ribbonMenu");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            frame.add(new ribbonMenu(), BorderLayout.CENTER);

            frame.pack();
            frame.setVisible(true);
        

        public static void main(String[] args) 
                SwingUtilities.invokeLater(new Runnable() 
                    public void run() 
                        UIManager.put("swing.boldmetal", Boolean.FALSE);
                        createAndShowGUI();
                    

                );
        

谢谢

【问题讨论】:

你为什么要向 JPanel 的构造函数传递“false”? Java 命名约定的类名以大写菜单开头。 【参考方案1】:

为什么需要更改返回类型?

而不是这个

JComponent panel1 = makeTextPanel("Panel #1");

使用

JPanel panel1 = (JPanel)makeTextPanel("Panel #1");

对于更多选项卡,您可以在该面板中再次添加 JTabbedPane

【讨论】:

以上是关于Java Swing:将选项卡添加到 JPanels的主要内容,如果未能解决你的问题,请参考以下文章

将JLayeredPane Swing添加到JPanel

Java 每次把一个Swing组件放在一个JPanel中时,总是放在左边,有啥办法让其放在面板中间?

java swing编程问题:一个jframe中添加一个jpanel后,为jpanel添加一个滚动条,当jpanel中内容过多时滑动

从 Java Swing 中的另一个类访问 JPanel 变量

java swing JPanel添加在JScrollPane上,有垂直的滚动条,可是滚动条拉到底,只显示了JPanel的一部分。

将处理 3 添加到 Jpanel