五子棋制作的问题

小白云天 2016-04-30 04:47:17

如图,我是btn是个按钮,menuItem是个菜单子选项,要让他们同时实现重新开始的功能。但是在运行的时候btn可以运行,menuItem不起作用,我基本上是按书上打的,Chess.this不知道为什么要加上它,而且加上了还是没作用。下面是部分代码

package chess;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import org.omg.CORBA.PUBLIC_MEMBER;

import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JLabel;
import java.awt.GridLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class ChessBoard extends JFrame {

private JPanel contentPane;
private JButton btn;
private JButton btn2;
private JButton btn3;
private JMenuItem menuItem;
private JMenuItem menuItem_1;
private JMenuItem menuItem_2;
private Mypanel lblNewLabel;

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

/**
* Create the frame.
*/
c[b]lass MyListener implements ActionListener {
[color=#FF0000]
public void actionPerformed(ActionEvent e){
Object obj=e.getSource();
if(obj==btn||obj==ChessBoard.this.menuItem){
lblNewLabel.reStart();
[/color]
}[/b]
}
}
public ChessBoard() {


MyListener mLi=new MyListener();
setTitle("\u5355\u673A\u4E94\u5B50\u68CB");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100,600, 650);

JMenuBar menuBar = new JMenuBar();
menuBar.setToolTipText("\u7CFB\u7EDF");
setJMenuBar(menuBar);

JMenu menu = new JMenu("\u7CFB\u7EDF");
menuBar.add(menu);

menuItem = new JMenuItem("\u91CD\u65B0\u5F00\u59CB");
menu.add(menuItem);

menuItem_1 = new JMenuItem("\u6094\u68CB");
menu.add(menuItem_1);

menuItem_2 = new JMenuItem("\u9000\u51FA");
menu.add(menuItem_2);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5,5,5,5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout(0, 0));

lblNewLabel = new Mypanel();
lblNewLabel.setForeground(Color.BLACK);
contentPane.add(lblNewLabel, BorderLayout.CENTER);

JPanel panel = new JPanel();
panel.setToolTipText("\u7684");
contentPane.add(panel, BorderLayout.SOUTH);
panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));

btn = new JButton("\u91CD\u65B0\u5F00\u59CB");
btn.addActionListener(mLi);

panel.add(btn);
btn2 = new JButton("New button");
btn2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(222);
}
});

panel.add(btn2);

btn3 = new JButton("New button");
panel.add(btn3);

}



}
...全文
278 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
willkinson 2016-06-29
  • 打赏
  • 举报
回复
你贴的代码里有两个问题,一个是你的JMenuItem没有添加事件监听器,也就是调用AddActionListener方法,但是你的JButton调用了该方法并且注册了你的事件监听器,所以你的JButton点击后可以实现功能,还有个问题你是你不能把你的事件监听器代码if(obj==btn||obj==ChessBoard.this.menuItem)中的后面一个条件删除,整个语句的意思是如果触发事件的源头是你的JButton或者你的JMenuItem,那么执行后续代码,你如果把第二个条件删除了,当然只有按了JButton才会有效了
rabbit_three 2016-05-02
  • 打赏
  • 举报
回复
|| 具有短路功能,试试 单 |
walkuere 2016-05-02
  • 打赏
  • 举报
回复
我是菜鸟 你首先要在if这行打断点,然后debug看 如果按了按钮没有跳转到这里,说明你这个menuItem没有addActionListener(MyListener),一般来说这个情况可能性比较大 如果跳转到这里而没有继续下去,说明你的==后面的这个没有连接对 这里的this看不懂,没这么用过

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧