按按钮打开一个新窗口

时间:2013-05-22 04:37:37

标签: java

我正在尝试按 JButton 打开新窗口。现在我的Jbutton的actionPerformed方法只是在按下后关闭窗口。我希望它在旧窗口关闭时打开一个新窗口。我知道,这个问题已经被问过了,但我尝试了很多东西,似乎没有人能够完美地运作。

    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.text.*;
    import java.util.Random;

     public class secondTab extends JFrame 
        {
            static JTabbedPane Pane = new JTabbedPane();

            static JPanel Second = new JPanel();
            static JPanel second = new JPanel(); // This Panel is inside the Second Panel

            static JButton guess1 = new JButton();
            static String words[] = new String[9];

            static Random getRandomWord = new Random();

            static int   rr;
            static  JButton Labels[] = new JButton[10];

     public static void main(String args[]) 
        {
            //construct frame
            new secondTab().show();
        }

     public secondTab() 
        {
            // code to build the form
            setTitle("Shopping Cart");

            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     
            getContentPane().setLayout(new GridBagLayout());

            // position tabbed pane
            GridBagConstraints gridConstraints = new GridBagConstraints();
            gridConstraints.gridx = 1;
            gridConstraints.gridy = 1;
            Pane.setForeground(Color.YELLOW);
            Pane.setBackground(Color.MAGENTA);

            getContentPane().add(Pane, gridConstraints);
            getContentPane().setLayout(new GridBagLayout());


         //  Tabs Starts From Here

             Second.setLayout(new GridBagLayout());

             words[1] = "JAVA";
             words[2] = "FLOAT";
             words[3] = "VOID";
             words[4] = "MAIN";
             words[5] = "STATIC";
             words[6] = "FINAL";
             words[7] = "PRIVATE";
             words[8] = "CHAR";
             words[9] = "IF";


             rr = getRandomWord.nextInt(10);

             for(int i = 1; i <=words[rr].length(); i++)
                {
                    Labels[i] = new JButton();
                    gridConstraints.gridx = 0;
                    gridConstraints.gridy = 0;
                    second.add(Labels[i]);
                }  


            gridConstraints.gridx= 0;
            gridConstraints.gridx= 0;
            Second.add(second, gridConstraints);


            guess1.setText("New Word");
            gridConstraints.gridx = 0;
            gridConstraints.gridy = 2;
            Second.add(guess1, gridConstraints);

这是我的按钮的操作执行方法

            // Action Performed method for the JButton guess1
            guess1.addActionListener(new ActionListener() 
                {
                    public void actionPerformed(ActionEvent e) 
                        {
                            dispose();
                        }
                });



            Pane.addTab("Game ", Second); 

            pack();
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            setBounds((int) (0.5 * (screenSize.width - getWidth())), (int) (0.5 * 
                    (screenSize.height - getHeight())), getWidth(), getHeight());
        }

    }

6 个答案:

答案 0 :(得分:4)

在dispose()之后添加新的面板语句。例如:添加

guess1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
                new JFrame("New Window").show();
            }
        });

还有一点 - 你已经创建了9个元素的数组,并且你试图插入10个抛出ArrayIndexOutOfBound异常的索引。

答案 1 :(得分:2)

您必须删除按钮和其他控件的静态关键字,然后才能执行此操作

     JTabbedPane Pane = new JTabbedPane();
     JPanel Second = new JPanel();
     JPanel second = new JPanel(); // This Panel is inside the Second Panel
     JButton guess1 = new JButton();
     String words[] = new String[10];
     Random getRandomWord = new Random();
     int rr;
     JButton Labels[] = new JButton[10];

您必须创建同一个类的新实例并显示它

        guess1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
                new secondTab().show();
            }
        });

答案 2 :(得分:1)

所以,而不是关闭当前窗口并创建一个窗口的新实例,这只是烦人(而且有点懒)。

您应该提供一种方法来重置UI的状态。

您应该通过一些重置内部状态并更新UI的方法调用来执行此操作。

你可以通过删除“游戏”面板,创建它的新实例并将其添加回框架来完成同样的事情。

闪烁帧是一个坏主意 - 恕我直言

答案 3 :(得分:0)

Hi,

        Please try like this.. It may help..

guess1.addActionListener(new ActionListener() 
                {
                    public void actionPerformed(ActionEvent e) 
                        {
                              dispose();
                             new AnotherJFrame();
                        }
                }
---------------------------------------------

import javax.swing.JFrame;
import javax.swing.JLabel;

public class AnotherJFrame extends JFrame
{
    public AnotherJFrame()
    {
        super("Another GUI");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        add(new JLabel("Empty JFrame"));
        pack();
        setVisible(true);
    }
}

答案 4 :(得分:0)

我看到您的问题已得到解答,因此这不能解决您的问题。我以为我会分享一些你可能想要修改的东西:

  1. 请勿使用show()/hide(),因为它们已被弃用。 [<强> More info ]
    分别使用setVisible(true/false)。 [<强> More info

  2. 在将每个组件添加到同一容器之前,您不必添加新的“GridBagLayout()”。即,您可以删除第二个getContentPane().setLayout(new GridBagLayout()); [ More info ]

  3. 请确保您了解Java中的数组索引(以及我所知道的所有编程语言 - 这不是那么多......但仍然是)从零开始! [<强> More info

  4. 为了找到“可用”屏幕大小Toolkit.getDefaultToolkit().getScreenSize();的中心是不够的,因为它包括屏幕插入(例如不可见的边距,任务栏等)。您还需要使用 Toolkit.getDefaultToolkit().getScreenInsets(GraphicsConfiguration); 并从屏幕宽度以及屏幕高度的顶部和底部插入中减去左右插图。

  5. 如果您只需要在屏幕上居中使用JFrame,则可以使用setLocationRelativeTo(null)。 [<强> More info

答案 5 :(得分:-1)