您好看看这段代码: 包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中的按钮,框架和面板的新手,所以请帮助这个代码。请纠正它。
答案 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);
}
});
}
}