2013-11-12 1 views
0

Я довольно новый в Java Качели и у меня есть некоторые проблемы при попытке обработать событие щелчка на кнопке с использованием пФом ActionPerformed метода, как и в документации: http://docs.oracle.com/javase/tutorial/uiswing/components/button.html#abstractbuttonЯ не могу обработать событие клика JButton с помощью метода actionPerformed(), не вводить метод, почему?

Так у меня есть этот LoginFrame класс:

package com.test.login; 

import javax.swing.JButton; 

import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.io.IOException; 

import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JPopupMenu.Separator; 
import javax.swing.JTabbedPane; 
import javax.swing.JTextField; 

import net.miginfocom.swt.MigLayout; 

import org.jdesktop.application.SingleFrameApplication; 

public class LoginFrame extends SingleFrameApplication { 

    private static final int FIXED_WIDTH = 550; 
    private static final Dimension INITAL_SIZE = new Dimension(FIXED_WIDTH, 230); 

    private boolean loginResult = true; 

    /* 
    public static void main(String[] args) { 
     System.out.println("DENTRO: LoginFrame() ---> main()"); 
     launch(LoginFrame.class, args); 
    } 
    */ 

    @Override 
    protected void startup() { 
     // TODO Auto-generated method stub 
     System.out.println("Inside LoginFrame ---> startup()"); 


     JFrame loginFrame = this.getMainFrame();   // main JFrame that represents the Windows 
     loginFrame.setTitle("XCloud Login"); 

     loginFrame.setPreferredSize(INITAL_SIZE); 
     loginFrame.setResizable(false); 

     Container mainContainer = loginFrame.getContentPane();  // main Container into the main JFrame 


     // JPanel creation and settings of the MigLayout on it: 
     // JPanel externalPanel = new JPanel(); 
     JPanelWithBackground externalPanel = null; 

     try { 
      externalPanel = new JPanelWithBackground("resources/logo.png"); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     externalPanel.setLayout(new net.miginfocom.swing.MigLayout("fill")); 

     externalPanel.add(new JLabel("Username"), "w 50%, wrap"); 

     JTextField userNameTextField = new JTextField(20); 

     externalPanel.add(userNameTextField, "w 90%, wrap"); 

     externalPanel.add(new JLabel("Password"), "w 50%, wrap"); 
     JTextField pswdTextField = new JTextField(20); 
     externalPanel.add(pswdTextField, "w 90%, wrap"); 

     JButton loginButton = new JButton("Login"); 
     loginButton.setActionCommand("loginAction"); 

     externalPanel.add(loginButton, "w 25%, wrap"); 

     mainContainer.add(externalPanel); 
     //mainFrame.add(mainContainer); 

     show(loginFrame); 


    } 

    // Operation performed when the loginButton is clicked: 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("Inside LoginFrame ---> actionPerformed()"); 
     if ("loginAction".equals(e.getActionCommand())) { 
      System.out.println("loginButton clcked !!!"); 

     } 
    } 

} 

Как вы можете видеть в этом классе у меня есть JButton имени loginButton и на этом OBJ ЭСТ я установил ActionCommand, таким образом:

JButton loginButton = new JButton("Login"); 
loginButton.setActionCommand("loginAction"); 

Тогда я создать следующее actionPerformed, которые должны обрабатывать это событие:

// Operation performed when the loginButton is clicked: 
public void actionPerformed(ActionEvent e) { 
    System.out.println("Inside LoginFrame ---> actionPerformed()"); 
    if ("loginAction".equals(e.getActionCommand())) { 
     System.out.println("loginButton clcked !!!"); 

    } 
} 

Так что этот метод принять ActionCommand внутри события, и если он равен loginAction распечатать сообщение.

Проблема заключается в том, что не входят в actionPerformed() метод (не печатать «Inside LoginFrame ---> actionPerformed()» строка в консоли Eclipse), так что я не могу справиться это событие click.

Почему? что мне не хватает?

Tnx

Andrea

ответ

3

Вы забыли добавить Действие Слушатель на кнопку. Добавьте ниже код в startup(), и он будет работать нормально.

loginButton.addActionListener(this); 

Также добавьте в свой класс объявление ActionListener.

public class LoginFrame extends SingleFrameApplication implements ActionListener{.. 
+0

Eclipse дает мне ошибку, когда я помещаю ее в свой код. – AndreaNobili

+0

OP не реализовал интерфейс ActionListener. Как вы это называете? – Masudul

+1

Пожалуйста, обратитесь к обновленному сообщению выше –

0

попробовать этот

public class LoginFrame extends SingleFrameApplication implements ActionListener{ 

    private static final int FIXED_WIDTH = 550; 
    private static final Dimension INITAL_SIZE = new Dimension(FIXED_WIDTH, 230); 

    private boolean loginResult = true; 

    /* 
    public static void main(String[] args) { 
     System.out.println("DENTRO: LoginFrame() ---> main()"); 
     launch(LoginFrame.class, args); 
    } 
    */ 

    @Override 
    protected void startup() { 
     // TODO Auto-generated method stub 
     System.out.println("Inside LoginFrame ---> startup()"); 


     JFrame loginFrame = this.getMainFrame();   // main JFrame that represents the Windows 
     loginFrame.setTitle("XCloud Login"); 

     loginFrame.setPreferredSize(INITAL_SIZE); 
     loginFrame.setResizable(false); 

     Container mainContainer = loginFrame.getContentPane();  // main Container into the main JFrame 


     // JPanel creation and settings of the MigLayout on it: 
     // JPanel externalPanel = new JPanel(); 
     JPanelWithBackground externalPanel = null; 

     try { 
      externalPanel = new JPanelWithBackground("resources/logo.png"); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     externalPanel.setLayout(new net.miginfocom.swing.MigLayout("fill")); 

     externalPanel.add(new JLabel("Username"), "w 50%, wrap"); 

     JTextField userNameTextField = new JTextField(20); 

     externalPanel.add(userNameTextField, "w 90%, wrap"); 

     externalPanel.add(new JLabel("Password"), "w 50%, wrap"); 
     JTextField pswdTextField = new JTextField(20); 
     externalPanel.add(pswdTextField, "w 90%, wrap"); 

     JButton loginButton = new JButton("Login"); 
     loginButton.setActionCommand("loginAction"); 
     loginButton.addActionListener(this); 
     externalPanel.add(loginButton, "w 25%, wrap"); 

     mainContainer.add(externalPanel); 
     //mainFrame.add(mainContainer); 

     show(loginFrame); 


    } 

    // Operation performed when the loginButton is clicked: 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("Inside LoginFrame ---> actionPerformed()"); 
     if ("loginAction".equals(e.getActionCommand())) { 
      System.out.println("loginButton clcked !!!"); 

     } 
    } 

} 
0

Это лучше создать свой собственный ActionListener и реализовать метод actionPerformed позже. Я сделал правильно один пример, очень похожий, и это мой код. Я ожидаю, что это может помочь вам:

1- Создайте свой ActionListener:

ActionListener chooseMe = createChoiceAction(); 

2- Создание кнопки:

button = new JButton("Aceptar"); 
button.addActionListener(chooseMe); 
p.add(button); 

3- Реализовать createChoiceAction() метод:

private ActionListener createChoiceAction() { 
     ActionListener chooseMe = new ActionListener() { 


      @Override 
      public void actionPerformed(ActionEvent e) { 

       System.out.println("Hola"+inputs.get(1)); 

      } 
     }; 
     return chooseMe; 
    } 
Смежные вопросы