Java中的ActionListeners

时间:2011-12-12 12:43:46

标签: java

好的,所以我有两个课程,他们并没有真正相互联系。 一个是输入中的另一个图形(通过使用扫描仪的终端)。我想用JTextField替换扫描仪,但我很难这样做..

我有点迷失在这里......

这是类GUI

//Constructor to create the UI components
 public UnoGraphics() {

  //JButtons---------------------------- 
  viewCards = new JButton("Move Card"); 
  input = new JTextField(5);

  //Creates a canvas and set the properties 
  canvas = new DrawCanvas();
  canvas.setPreferredSize(new Dimension(CANVAS_WIDTH,CANVAS_HEIGHT));
  this.setContentPane(canvas);
  this.setDefaultCloseOperation(EXIT_ON_CLOSE);


//This is How I was thinking of implementing my input------------HERE---------------->
  input.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
             inputText = input.getText();
         }});//End ActionListener()

  this.pack();
  this.setTitle("Uno!");
  this.setVisible(true);
 }//End Constructor

 //Custom drawing canvas (designed as inner class). This is were we draw/change the cards
  class DrawCanvas extends JPanel {
   // Custom drawing codes--------------
    @Override
   public void paintComponent(Graphics g) {

      //Set the background to black
      super.paintComponent(g);
      setBackground(Color.black);
     //cards being drawn-------------------
     //buttons and text fields
     add(viewCards);
     add(input);
   }//End PaintComponent()
  }//End DrawCavas()
 }//End Program 

带扫描仪的第二类输入:

  public class CommandLinePlayer extends Player 
  {


//private String inputText;
// constructor
public CommandLinePlayer(String aname) 
{
    //super aname is from the super class player;
    super(aname);

}


    // command line player can also say uno.  This uses scanner(reads user in puts from keyboard) and the response should be typed in
    public boolean sayUno()
    {
        System.out.println("Would you like to say uno?  Yes or No");
        Scanner scan = new Scanner(System.in);
        String yes = scan.next();
        // returns response 
        //returns yes if the user types yes and ignores the case
        return yes.equalsIgnoreCase("Yes");
    }

    //this method is the choose card of type int takes int one argument of type Card
    // command line version (normal player on command line)
    //this method takes in the card from your hand and "sends" it to the controller
    protected int chooseCard(Card topCard)
    {
        // display hand
        System.out.println("\nHere is the topCard: " + topCard);

        System.out.println("Your hand has:");

        // loops through the players(commandlineplayer) hand and prints out the players cards.  Index could start at 0, but 1 would be the first card
        for(int index = 0; index < numOfCards; index ++)
        {
            System.out.println("Card # " + index + ": " + hand[index]);

        }
        // choose Card prompts the player to match, or pick a card based on the index, and then press enter.
        // if a card does not match the topcard, a key corresponding to any card can be pressed.  This would automatically add a
        // card to a players hand.
        System.out.println("Play a card #. If you don't have a card to play, choose any card # to draw.");
        Scanner scan = new Scanner(System.in);
        int num = scan.nextInt();
        return num;

    }


    // this is the choose color method for the command line player but only if it is a wild card does this method takes place
    // command line player can choose a cards color based on the options displayed on the screen.(System.out.println...statements)  
    public Card.Color chooseColor()
    {
        // choose a color using scanner
        Scanner scanin = new Scanner(System.in);

        System.out.println("Choose a color by pressing a number corresponding to your choice:");

        System.out.println("Your options are 1.Red 2.Green 3.Yellow 4. Blue");

        // the switch corresponds a number (color) to the cases, and returns a chosen card.  
        int color = 0;
        color = scanin.nextInt();
        switch (color) 
        {
            case 1: System.out.println("The color you chose is: Red");
                    return Card.Color.Red;
            case 2: System.out.println("The color you chose is: Green");
                    return Card.Color.Green;
            case 3: System.out.println("The color you chose is: Yellow");
                    return Card.Color.Yellow;
            case 4: System.out.println("The color you chose is: Blue");
                    return Card.Color.Blue;
            default: System.out.println("NONE");
        }

           return Card.Color.None;          
    }

    public class inputListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            //I Was Thinking something like this-----------HERE-----
        }
    }
  }

1 个答案:

答案 0 :(得分:1)

以下是您需要的相关代码块,您应该能够自己将它们集成到代码中。

public class Controller {
    public void startMethod() {
        final UIClass myUI = new UIClass();
        myUI.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                handleUIInformation(myUI);
            }
        }
    }

    private void handleUIInformation(UIClass myUI) {
        String textval = myUI.textField.getText();
        // here you do whatever you want with the text
    }
}

public class UIClass {
    JButton button;
    JTextField textField;
    public UIClass() {
        button = new JButton();
        textField = new JTextField();
        textField.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if(e.getKeyCode() == KeyEvent.VK_ENTER) {
                    button.doClick();
                }
            }
        });
    }

    public void addActionListener(ActionListener al) {
        button.addActionListener(al);
    }
}