Java JButton - 制作简单的菜单

时间:2013-05-29 22:22:57

标签: java swing button frame actionlistener

您好看看这段代码: 包arkanoid;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.event.*;

public class Arkanoid extends JFrame 
{
private static final long serialVersionUID = 6253310598075887445L;
static JFrame frame;


static class Action1 implements ActionListener {        
      public void actionPerformed (ActionEvent e) {     
        //frame = new JFrame("Arkanoid");
        frame.setLocationRelativeTo(null);
        frame.setIgnoreRepaint(true);
        frame.setResizable(false);
        frame.setVisible(true);
        frame.setSize(500,400);
        frame.add(new Gra());
      }
    }   
    static class Action2 implements ActionListener {        
      public void actionPerformed (ActionEvent e) {     
          frame.dispose();
          System.exit(0);
      }
} 
public static void main(String[] args) 
{
    //new Arkanoid();
      frame = new JFrame("Arkanoid");
      frame.setSize(500,400);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setTitle("Arkanoid BETA");
      frame.setLocationRelativeTo(null);
      frame.setIgnoreRepaint(true);
      frame.setResizable(false);
      frame.setVisible(true);
      JPanel panel = new JPanel();
      frame.add(panel);

      JButton button = new JButton("Nowa Gra");
      panel.add(button);
      button.addActionListener (new Action1());

      JButton button2 = new JButton("Wyjscie");
      panel.add(button2);
      button2.addActionListener (new Action2());
}
}

这个代码几乎可以工作,我想让一个按钮2退出按钮像右上方框架图标中的X按钮一样工作,而button1需要在同一个窗口中打开一个Gra()。当我这样做它不是很好的工作:/我需要在button1上点击2次去Gra()和Gra()中的更多KeyListeners不工作:( 我是java中的按钮,框架和面板的新手,所以请帮助这个代码。请纠正它。

3 个答案:

答案 0 :(得分:3)

您的代码存在许多基本问题,其中最不重要的是button1需要2次点击的原因。

但是,对于您的问题,您应该尝试重新排列button1听众的顺序,以便在将Component设置为可见之前先将static class Action1 implements ActionListener { public void actionPerformed (ActionEvent e) { frame.add(new Gra()); frame.revalidate(); } } 添加到框架中。一个应该有效的例子:

frame

请注意,您已在main中设置static的尺寸,位置等,因此无需在每次点击按钮时再次设置它们。

我强调您的代码存在比此问题更重要的问题。您应该看看Java的修饰符类型(Arkanoid在这里似乎不适用),以及面向对象的概念,例如继承(您定义JFrame类来扩展JFrame,但是有一个{{1}}对象作为类变量。)

答案 1 :(得分:2)

  

我想制作一个button2退出按钮,就像右上方框架中的X按钮一样

您可以使用Closing an Application中的ExitAction课程。

有关如何使用按钮的其他示例,请阅读How to Use Buttons上的Swing教程。这是所有Swing相关问题的起点。

答案 2 :(得分:1)

您的代码存在许多问题。我稍微重构了一下。使用以下代码& @ ricky116回答我认为你应该得到所有这些。

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

public class Arkanoid extends JFrame 
{
    public Arkanoid() {
        super("Arkanoid");
        setSize(500,400);
        setTitle("Arkanoid BETA");
        setLocationRelativeTo(null);
        setResizable(false);

        final JPanel panel = new JPanel();
        setContentPane(panel);

        panel.add(new JButton(new AbstractAction("Nowa Gra") {
            public void actionPerformed (ActionEvent e) {     
              panel.removeAll();
              panel.add(new Gra());
              panel.revalidate();
              panel.repaint();
            }
        });

        panel.add(new JButton(new AbstractAction("Wyjscie") {
            public void actionPerformed (ActionEvent e) {     
                Arkanoid.this.setVisible(false);
            }
        });
    }

    public static void main(String[] args) 
    {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
              Arkanoid frame = new Arkanoid();
              frame.setVisible(true);
            }
        });
    }
}