Java - код в одном файле и дизайн в другом файле (нераспознанное событие actionPerformed) - PullRequest
1 голос
/ 11 февраля 2011

Для начала извините за мой плохой английский.Я столкнулся с проблемой.Я создаю новое Java-приложение и хочу поместить код проекта в файл класса с именем Login_Design.java, а код кнопок и другой контент - в другой файл класса с именем Login.java.

2 файлаработать так:

Login_Design.java:

    public class Login_Design
    {
        public static JButton jbtnlogin;

        public Login_Design()
        {
            initComponents(); 
        }

    public void initComponents()
    {   
        jframelogin = new JFrame();
        (...)

        jbtnlogin = new JButton();
        (...)

        jbtnlogin.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent event)
            {
                Login.jbtnloginActionPerformed(event);
            }
        });

        jframelogin.add(jbtnlogin);
    }
}

Login.java:

package unigamex;

import java.awt.event.ActionEvent;

import unigamex.Login_Design;

public class Login
{
    public Login()
    {
        new Login_Design();
    }

    protected void jbtnloginActionPerformed(ActionEvent event) 
    {
        System.exit(0);
    }

    public static void main(String args[]) 
    {
        new Login();
    }

    public void JActionPerformed()
    {       
        Login_Design.jbtnlogin.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent event)
            {
                jbtnloginActionPerformed(event);
            }
        });
    }
}

Теперь проблема заключается в следующем: 1 - если я добавлю этот код втот же java-файл, все работает (все кнопки работают)

2 - Если мне нравится, я делаю прямо здесь, все кнопки отображаются, но их невозможно использовать.

3- Удалите открытый void JActionPerformed () и поместите код в лагерь initcomponents Login_Design, но он показывает мне следующее сообщение:

Невозможно сделать статическую ссылку на нестатический метод jbtnsairActionPerformed (ActionEvent) из типаЛогин

Как я могу решить эту проблему?Заранее спасибо, Луис да Коста

Ответы [ 2 ]

1 голос
/ 11 февраля 2011

Один из способов сделать это - заставить Login реализовать ActionListener и зарегистрировать его в объекте Login_Design как таковом. Класс Login_Design установит любые регистранты как ActionListener s на кнопках.

EDIT:

in Login_Design:

public void addActionListenerToButtons(ActionListener listener){
    jbtnlongin.addActionListener(listener);
}

затем в Login добавить this к экземпляру Login_Design.

0 голосов
/ 11 февраля 2011
public void actionPerformed(java.awt.event.ActionEvent event)             
{                
 Login.jbtnloginActionPerformed(event);             
} 

Вы пытаетесь получить доступ к методу, доступ к которому можно получить только через переменную экземпляра (т. Е. Он не является статическим).
Что вы должны сделать, это примерно так:

public class Login     
{        
  public Login()
  {
     new Login_Design(this);        
  }
   protected void jbtnloginActionPerformed(ActionEvent event)      
   {
       System.exit(0);     
   } 

}



public class Login_Design{ 
  private Login login;
  public Login_Design(Login login){
        this.login = login;
        initComponents();                   
  } 

 public void initComponents()                
 { 
//...
   jbtnlogin = new JButton();                
   jbtnlogin.addActionListener(new java.awt.event.ActionListener()
   {
         public void actionPerformed(java.awt.event.ActionEvent event)
         {
             login.jbtnloginActionPerformed(event);

         }

   }
  )
//...
 }

}
}
...