自动创建组件到'选择' JTabbedPane中

时间:2016-03-01 14:59:54

标签: java swing user-interface awt jtabbedpane

我已经编写了一个代码,如下所示。 在这里,我有一个标签式面板,我在框架的右侧添加了更多带有' +'(添加标签符号)的标签,如gChrome。我在Frame的左侧有另一个固定面板,它由一些按钮组成。 我的问题:

1。现在,我想通过使用其他Panel中的Button Action将一些组件添加到特定选项卡式面板(面板1或面板2 ..)中。我怎样才能做到这一点。之后,我需要在脚本中保存每个选项卡式面板的所有组件列表。 有任何建议请。

2. 如果您运行代码,则可以在输出中看到右侧选项卡式面板的大小非常窄,可能是使用BorderLayout.LINE_END。如果我扩展我的GUI,面板保持相同的大小。 我想修复标签面板的窄尺寸,我希望随着框架的增加,标签面板的尺寸也会增加。

感谢。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class TestTabSelection extends JFrame {

    public JTabbedPane tab = new JTabbedPane();
    public JPanel editPanel = new JPanel();
    private JButton MM, CM, AAA, VO;

    public TestTabSelection() {


        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JPanel panel1 = new JPanel();
                panel1.setSize(600, 550);
                JPanel createAll = new JPanel();
                createAll.setLayout(new BorderLayout());
                createAll.BorderLayout.LINE_END;

                tab.addTab("CreateAll", createAll);
                tab.addTab("Slice 1", panel1);
                tab.addTab("+", new JPanel());
                tab.getModel().addChangeListener(new ChangeListener() {
                    private int lastSelected;
                    private boolean ignore = false;

                    @Override
                    public void stateChanged(ChangeEvent e) {
                        if (!ignore) {
                            ignore = true;
                            try {
                                int selected = tab.getSelectedIndex();
                                String title = tab.getTitleAt(selected);
                                if ("+".equals(title)) {
                                    JPanel pane = CreateSlice();
                                    tab.insertTab("Slice "
                                            + (tab.getTabCount()), null, pane,
                                            null, lastSelected + selected);
                                    tab.setSelectedComponent(pane);
                                } else {
                                    lastSelected = selected;
                                }
                            } finally {
                                ignore = false;
                            }
                        }
                    }
                });



                final JButton btn = new JButton("Add");
                btn.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        System.out.println(tab.getTabCount());
                    }
                });

                JFrame frame = new JFrame("Testing");
                frame.setTitle("Network Slice Creation");
                frame.setSize(1000, 700);
                frame.setBackground(Color.gray);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                createPanel0();
                frame.add(editPanel, BorderLayout.LINE_START);
                frame.add(tab,BorderLayout.LINE_END);

                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    private void createPanel0() {

        editPanel = new JPanel(null);
        editPanel.setPreferredSize(new Dimension(330, 650));
        editPanel.setBorder(BorderFactory.createLineBorder(Color.gray));
        editPanel.setBorder(BorderFactory
                .createTitledBorder("Netowrk Functions"));
        // editPanel.setLayout(new BorderLayout());

        // FunctionHandler handler = new FunctionHandler();

        MM = new JButton("MM");
        MM.setBounds(50, 80, 150, 40);
        MM.setVisible(true);
        // MM.addActionListener(handler);

        AAA = new JButton("AAA");
        AAA.setBounds(50, 160, 150, 40);
        AAA.setVisible(true);
        // AAA.addActionListener(handler);

        CM = new JButton("CM");
        CM.setBounds(50, 240, 150, 40);
        CM.setVisible(true);
//      CM.addActionListener(handler);

        VO = new JButton("VO");
        VO.setBounds(50, 320, 150, 40);
        VO.setVisible(true);
        /* VO.addActionListener(handler); */

        editPanel.add(MM);
        editPanel.add(AAA);
        editPanel.add(CM);
        editPanel.add(VO);

    }

    public JPanel CreateSlice() {

        JPanel pane = new JPanel(null);
        pane.setPreferredSize(new Dimension(550, 600));
        return pane;

    }

    public static void main(String[] args) {
        new TestTabSelection();
    }

}

LayOut needs to be corrected (Image)

Target Action (Image)

1 个答案:

答案 0 :(得分:0)

我有解决方案, 需要一个全局变量int index, 在stateChanged方法中,index = e.getSource().getselectedIndex(); 我在ArrayList(PanelList)中保存了每个Panel, 然后actionPerformed由任何按钮创建组件到选定的JTabbedPane,将是

PanelList.get(index).add(button);

它获取我选择的JTabbedPane并在其中添加Component。