如何使用JButton从另一个类打开JFrame。目前我使用链接到动作监听器的按钮

时间:2017-05-10 23:17:35

标签: java jframe jbutton actionlistener

小鬼

ort java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.sound.sampled.*;
import java.util.Scanner;
import java.io.*;
import java.net.*;


public class Menu extends JFrame implements ActionListener

{

      private  JButton btn = new JButton("start now");

       public Menu()throws Exception
        {  
             JFrame os = new JFrame ();
             os.add(btn);
             btn.setPreferredSize(new Dimension(5, 10));

             btn.addActionListener(this);

            os.setSize(822,547);
            os.setBounds(550,300, 700,459);
            os.setVisible(true);
            os.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Container cp = os.getContentPane();             
            JPanel endmessage = new JPanel();

            JLabel mes = new JLabel();
            mes.setIcon (new ImageIcon("backgroundMenu.png" ));

            cp.add(endmessage);
            endmessage.add(mes);
            os.setVisible(true);

          }


    public void actionPerformed(ActionEvent e)       
         { 
           if (e.getSource() == btn)
           {
            SpaceShipsGamePartThree myFrame = new SpaceShipsGamePartThree();
            myFrame.setVisible(true);

          }
             }

        public static void main(String args[])throws Exception      
         {  
            Menu myFrame = new Menu();

          }

   }  

// enter image description here我收到消息错误:未报告的异常;必须被抓住或宣布被抛出。此类最初用于菜单,因此可以链接到游戏的主要部分。

1 个答案:

答案 0 :(得分:1)

由于SpaceShipsGamePartThree抛出异常,您需要在那里处理它。由于您无法更改actionPerformed的方法签名,因为它是ActionListener接口定义的,因此您需要捕获异常并自行处理。

@Override 
public void actionPerformed(ActionEvent e) {
    if (e.getSource() == btn) {
        try {
            SpaceShipsGamePartThree myFrame = new SpaceShipsGamePartThree();
            myFrame.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

虽然这只是将异常打印到控制台,但我建议您考虑使用类似JOptionPane之类的内容来至少向用户显示某种错误消息,这样他们就不会离开想知道出了什么问题