在JDialog中创建JTabbedPane并使框架可用

时间:2013-04-26 17:59:46

标签: java swing jframe jdialog jtabbedpane

我在Java中使用GUI,并且我已经开了几个JDialogs一个在另一个之上。 我试图创建JTabbedPane并且我已经成功了。但是,我必须在JTabbedPane中制作JFrame。我已经尝试了,但JPanel打开了所有空白。

当我使用JFrame时(所以新的JTabbedPane开始运作),相同的框架出现在前一个框架后面。

所以我的问题是:

  • 如何在JDialog
  • 中创建标签式窗格
  • 如果我使用JTabbedPane,如何让JFrame出现在所有其他框架的前面?

这是我的代码,当我点击之前JFrame

中的JButton时,此JDialog已打开
public class AddComponents extends JDialog {    

    private String[] arr = {"House", "Microgrid", "CSP", "VPP"};

     public AddComponents(JDialog pai, String titulo)
    {
        super(pai, titulo);
        frame = new JFrame(titulo);

        // Display the window.

        frame.setSize(500, 300);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        // set grid layout for the frame

        frame.getContentPane().setLayout(new GridLayout(1, 1));


        tabbedPane = new JTabbedPane(JTabbedPane.TOP);
        pack();

        for (int i = 0; i < arr.length; i++) {
            String tmp = arr[i];
            tabbedPane.addTab(tmp, makePanel(tmp));


        } 

        frame.getContentPane().add(tabbedPane);
        frame.setMinimumSize(new Dimension(getWidth(), getHeight()));
        frame.setLocation(pai.getX() + 85, pai.getY() + 25);
        frame.setEnabled(true);


    }

    private JPanel makePanel(String text) {
        JPanel p = new JPanel();
        //p.setLayout(new GridLayout(0,1));
        JPanel p1 = new JPanel();
        JPanel p2 = new JPanel();


        if(text.equals("House"))
        { //CADA UM DOS ifs chama a class correspondente para criar o interface
          p1.setLayout(new GridLayout(4, 2));

          idLabel = new JLabel("Component ID:");
          idText = new JTextField(""); 
          p1.add(idLabel);
          p1.add(idText);



          maxUsageLabel = new JLabel("Max usage per hour:");
          maxUsageText = new JTextField("");
          p1.add(maxUsageLabel);
          p1.add(maxUsageText);

          minUsageLabel = new JLabel("Min usage per hour:");
          minUsageText = new JTextField("");
          p1.add(minUsageLabel);
          p1.add(minUsageText);

          averageUsageLabel = new JLabel("Average usage per hour:");
          averageUsageText = new JTextField("");
          p1.add(averageUsageLabel);
          p1.add(averageUsageText);

       //   emptyLabel = new JLabel("");
          saveButton = new JButton("Save");
         // p.add(emptyLabel);
          p2.add(saveButton);

          p.add(p1);
          p.add(p2);

        }
        if(text.equals("Microgrid"))
        {
            p.setLayout(new GridLayout(5, 2));
            outroLabel = new JLabel(" Microgrid");
            p.add(outroLabel);


        }
        if(text.equals("VPP"))
        {
            p.setLayout(new GridLayout(5, 2));
            outroLabel = new JLabel(" VPP");
            p.add(outroLabel);
        }
        if(text.equals("CSP"))
        {
            p.setLayout(new GridLayout(5, 2));
            outroLabel = new JLabel(" CSP");
            p.add(outroLabel);
        }

        return p;

    }


}

2 个答案:

答案 0 :(得分:1)

"How can I create the tabbed pane in a JDialog ?"

  • 与将其添加到JFrame时相同。这里基本上没有任何区别。

"How do I make the JTabbedPane appear in front of all other frames, if I use JFrame ?"

  • 你没有。如果要在其他窗口上方显示窗口,则使用JDialog。

答案 1 :(得分:1)

用于创建JDialog:

 final JDialog dialog = new JDialog();
 dialog.add(tabbedPane);
 dialog.setVisible(true);

Java应用程序通常只有一个JFrame,所以没有人担心Z顺序。如果您喜欢,可以使用JInternalFrame。这是tutorial。但是,您可以改用对话框。