2014-09-07 2 views
-1

Два класса в одном пакете,Java вызов метода из моего основного класса из другого класса

Основной класс, который имеет комбо публичных статических и переменных экземпляра. Создает экземпляр класса с именем instance.

Другой класс Login, а не подкласс, это бизнес, но я хочу назвать метод из guiInstance из main.

Проблема в том, что я не могу заставить ее работать, я не могу получить класс Login, чтобы найти какие-либо методы экземпляра или класса gui, несмотря на то, что они были общедоступными.

Я только что сделал новый пакет с конфигурацией, которую хочу, и, очевидно, у меня есть неправильное представление о том, как работают методы вызова.

public class GUI { 

    JPanel jp = new JPanel(); 

    public static void main(String[] args) { 
     GUI instance = new GUI(); 
    } 

    public void ping(){ 
     System.out.println("that worked"); 
    } 
} 


public class Login extends JPanel { 

    /** Creates new form Login */ 
    public Login() { 
     initComponents(); 
    } 

    /** This method is called from within the constructor to 
    * initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is 
    * always regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     jButton1 = new javax.swing.JButton(); 

     jButton1.setText("jButton1"); 
     jButton1.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       jButton1MouseClicked(evt); 
      } 
     }); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); 
     this.setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(112, 112, 112) 
       .addComponent(jButton1) 
       .addContainerGap(215, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(46, 46, 46) 
       .addComponent(jButton1) 
       .addContainerGap(231, Short.MAX_VALUE)) 
     ); 
    }// </editor-fold> 

    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) { 
     instance.ping(); 
    } 


    // Variables declaration - do not modify 
    private javax.swing.JButton jButton1; 
    // End of variables declaration 

} 

ответ

1

У вас есть экземпляр GUI в методе main(), но вам не кажется, чтобы создать экземпляр Login. Я хотел бы предложить вам пройти экземпляр GUI к вашему Login конструктор, поэтому в Login добавить что-то вроде -

private GUI gui = null; 
public Login(GUI gui) { 
    this.gui = gui; 
    initComponents(); 
} 

Тогда в main() вы можете сделать что-то подобное,

public static void main(String[] args) { 
    GUI instance = new GUI(); 
    Login login = new Login(instance); 
    // next I believe you need to make your Frame and components visible 
} 
+0

пятно на, это не то, что я когда-либо делали это раньше, и невозможно сделать что-то, что, по вашему мнению, должно произойти, когда вы не знаете, что это называется. теперь все кажется таким простым! Благодаря!!! – SimoneyHoney

+0

Nitpick: в то время как, конечно, правильно, лично я бы предпочел передать какой-то интерфейс для входа в систему, чтобы не выставлять элементы GUI, которые Login не должен был знать или должен иметь доступ. – MadProgrammer

+0

Спасибо MadProgrammer, имейте вы какие-то указатели кода для реализации, пожалуйста? – SimoneyHoney