Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ActionListener从一个JFrame跳到下一个JFrame不起作用_Java_Swing - Fatal编程技术网

Java 使用ActionListener从一个JFrame跳到下一个JFrame不起作用

Java 使用ActionListener从一个JFrame跳到下一个JFrame不起作用,java,swing,Java,Swing,当点击“开始”按钮进入我的类“框架”时,我试图获取框架,但是当我这样做时,框架只是关闭,而不是执行任何操作。我在学校项目的JavaSwing中这样做,所以Swing是需求的一部分。如果有人能告诉我为什么会这样,我会非常感激!我取出了导入文件,但我导入了所有必要的东西这是我的代码: package snake; public class Start extends JFrame implements ActionListener { private JPanel contentPan

当点击“开始”按钮进入我的类“框架”时,我试图获取框架,但是当我这样做时,框架只是关闭,而不是执行任何操作。我在学校项目的JavaSwing中这样做,所以Swing是需求的一部分。如果有人能告诉我为什么会这样,我会非常感激!我取出了导入文件,但我导入了所有必要的东西这是我的代码:

    package snake;

public class Start extends JFrame  implements ActionListener {

private JPanel contentPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Start frame = new Start();
                frame.setVisible(true);
                frame.setLocationRelativeTo(null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}


/**
 * Create the frame.
 */
public Start() {

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 800, 500);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    GridBagLayout gbl_contentPane = new GridBagLayout();
    gbl_contentPane.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0};
    gbl_contentPane.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0};
    gbl_contentPane.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
    gbl_contentPane.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
    contentPane.setLayout(gbl_contentPane);

    JLabel lblSnake = new JLabel("Snake");
    GridBagConstraints gbc_lblSnake = new GridBagConstraints();
    gbc_lblSnake.insets = new Insets(0, 0, 5, 0);
    gbc_lblSnake.gridx = 7;
    gbc_lblSnake.gridy = 0;
    contentPane.add(lblSnake, gbc_lblSnake);

    JButton btnStart = new JButton("Start");
    GridBagConstraints gbc_btnStart = new GridBagConstraints();
    gbc_btnStart.insets = new Insets(0, 0, 5, 0);
    gbc_btnStart.gridx = 7;
    gbc_btnStart.gridy = 3;
    contentPane.add(btnStart, gbc_btnStart);

    // action listener for start btn
    btnStart.addActionListener(new ActionListener() {

        // once this is clicked on, it should call the GUI
        @Override
        public void actionPerformed(ActionEvent e) {
            new Frame();
            // closes the old form after start is clicked
            dispose();

        }
    });

    JButton btnBack = new JButton("Back");
    GridBagConstraints gbc_btnBack = new GridBagConstraints();
    gbc_btnBack.insets = new Insets(0, 0, 5, 0);
    gbc_btnBack.gridx = 7;
    gbc_btnBack.gridy = 5;
    contentPane.add(btnBack, gbc_btnBack);

    JTextArea textArea = new JTextArea("\t\t\t        SNAKE INSTRUCTIONS:\t\t\t\n\n\n1) Use the right, left, up, and down arrow keys to move the snake right, left, up, and down respectively.\n\n2) Each apple collected by the snake is a point\n\n3) If the snake collides with the wall or itself the game is over and you lose!\n\nWe hope you enjoy playing this old-school snake throwback!");
    GridBagConstraints gbc_textArea = new GridBagConstraints();
    gbc_textArea.fill = GridBagConstraints.BOTH;
    gbc_textArea.gridx = 7;
    gbc_textArea.gridy = 7;
    contentPane.add(textArea, gbc_textArea);



}


@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub

}


 }

正如我所看到的,你正在试图打开一个新的自己的框架。看看这部分:

@Override
        public void actionPerformed(ActionEvent e) {
            new Frame();
            // closes the old form after start is clicked
            dispose();

        }
您正在创建一个没有变量的框架。创建帧对象后,您应该使其可见,如下所示:

@Override
        public void actionPerformed(ActionEvent e) {
            Frame frame1 = new Frame();
            frame1.setVisible(true);
            // closes the old form after start is clicked
            dispose();

        }

因为您的框架在默认情况下是不可见的。

1有关更好的帮助,请尽快参阅2,以添加或。首先,Frame类似乎缺失了。顺便说一句,鉴于它也是java.awt.Frame的名称,我建议更有效、更明确地命名它,比如GameFrame之类的东西。这些问题应该得到解决,OTOH,我已经发现了直接的问题。猜猜当setDefaultCloseOperationJFrame.EXIT_on_关闭的帧时会发生什么;当它被处置时,设置为不执行!