如何使用actionPerformed方法的结果来实现main方法 - java

时间:2015-05-12 11:30:57

标签: java class actionlistener main

我有一个名为Screen的类,其中包含actionPerformed方法。 我希望不同的菜单项有不同的结果:随机,攻击性和人性化。

这个结果会影响主要方法,但我不确定如何将两者联系起来......

public class Screen extends JFrame
                implements ActionListener {

ActionListener listener;

JMenuItem random = new JMenuItem("Random");
JMenuItem aggressive = new JMenuItem("Aggressive");
JMenuItem human = new JMenuItem("Human");

public Screen(Board board){

  //menuBar items
  menu.add(random);
    random.addActionListener(this);
    menu.add(aggressive);
    aggressive.addActionListener(this);
    menu.add(human);
    human.addActionListener(this);

  ....
  //sets up board of buttons and adds actionListener to each.
  ....
}
public void actionPerformed(ActionEvent e) {

      if(e.getSource() == random){

      }
      if(e.getSource() == aggressive){

      }
      if(e.getSource() == human){

      }
    //code for the board buttons - nothing to do with the menu. 
    //But thought it might help
    if (numClicks == 0){
        JButton piece = (JButton) e.getSource();
        String xy = piece.getName();
        String x = xy.substring(0,1);
        String y = xy.substring(2,3);
        FromXInt = Integer.parseInt(x);
        FromYInt = Integer.parseInt(y); 
        System.out.println("From" + " " +FromXInt + "," + FromYInt);
    }
    else{
        JButton piece = (JButton) e.getSource();
        String xy = piece.getName();
        String x = xy.substring(0,1);
        String y = xy.substring(2,3);
        ToXInt = Integer.parseInt(x);
        ToYInt = Integer.parseInt(y);   
        System.out.println("To" + " " + ToXInt + "," + ToYInt);
    }
    numClicks++;
    if (numClicks >= 2){
        numClicks = 0;      
    }
    return;
}
}

我的课程包含主要方法:

public class Chess{

  public static void main(String [ ] args){

    Screen s = new Screen(board);

    // my attempt but doesn't work
    if (s.actionPerformed(e) == random){


    .....

注意:我是Java的新手,仍然试图了解多个类的链接。 -------------------- ActionPerformed方法还包含事件,如果单击按钮但我没有添加该代码,因为它使事情变得复杂.--

2 个答案:

答案 0 :(得分:0)

此方法使用公共枚举,并根据用户菜单选项设置样式变量:

package chess;
//...
public class Screen extends JFrame
        implements ActionListener {

    private JMenuItem random = new JMenuItem("Random");
    private JMenuItem aggressive = new JMenuItem("Aggressive");
    private JMenuItem human = new JMenuItem("Human");

    public enum PlayStyle {Random, Aggressive, Human};
    private PlayStyle style;

    public Screen(Board board) {

        //menuBar items
        menu.add(random);
        random.addActionListener(this);
        menu.add(aggressive);
        aggressive.addActionListener(this);
        menu.add(human);
        human.addActionListener(this);
        //....
        //sets up board of buttons and adds actionListener to each.  
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == random) {
            style=PlayStyle.Random;
        }
        if (e.getSource() == aggressive) {
            style=PlayStyle.Aggressive;
        }
        if (e.getSource() == human) {
            style=PlayStyle.Human;
        }

        //code for the board buttons - nothing to do with the menu. 
        //....
    }
    public PlayStyle getStyle(){
        return style;
    }

}

这是包含主要方法的类:

package chess;

import chess.Screen.PlayStyle;

public class Chess{

     public static void main(String [ ] args){
         Screen s = new Screen(board);

         // this attempt will work
         if (s.getStyle()==PlayStyle.Random) {
             ...
         } else if (s.getStyle()==PlayStyle.Aggressive){
             ...

答案 1 :(得分:-3)

您正在调用一个方法,似乎您想要使用从该方法返回的内容,但该方法本身不返回任何内容,即“void”。我改变了你的Screen类,以便该方法现在返回一些东西。

public class Screen extends JFrame
                    implements ActionListener {
  public Source actionPerformed(ActionEvent e) {

    ....

    if(e.getSource() == random){

    }
    if(e.getSource() == aggressive){

    }
    if(e.getSource() == human){

    }

    return e.getSource()
}

主方法现在可以从通话中接收结果并使用它。