2013-11-13 7 views
0

Я очень новичок в разработке приложений Java Swing и у меня есть следующая проблема:Как выполнить метод класса из другого класса?

У меня есть этот GUI класс, содержащий main() метод:

package com.test.login3; 

import org.jdesktop.application.SingleFrameApplication; 


public class GUI extends SingleFrameApplication { 

    public static void main(String[] args) { 
     launch(GUI.class, args); 
    } 

    @Override 
    protected void startup() { 
     // TODO Auto-generated method stub 
     System.out.println("GUIBis ---> startUp()"); 
     MainFrame mainFrame = new MainFrame(); 
     mainFrame.setVisible(true); 

    } 

    @Override 
    protected void shutdown() { 
     System.out.println("Entered into GUI ---> shutdown()"); 
    } 

} 

Как вы можете видеть в этом классе является main() метод, который просто выполняет эту операцию:

launch(GUI.class, args); 

Чтение на официальной документации: launch doc

Создает экземпляр указанного подкласса Application, устанавливает свойство приложения ApplicationContext, а затем вызывает метод запуска нового приложения. Метод запуска обычно называют из основного приложения. Конструктор applicationClass и методы запуска запускаются в потоке диспетчеризации событий.

Так метод startup() выполняется, и там создается и показать новый MainFrame объект

2) Это код MainFrame (он расширяет классический Свинг JFrame):

package com.test.login3; 

import java.awt.Dimension; 
import java.awt.Window; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.AbstractAction; 
import javax.swing.Action; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

import com.test.login.LoginFrame; 

import net.miginfocom.swing.MigLayout; 


public class MainFrame extends JFrame { 

    private static final int FIXED_WIDTH = 1000; 
    private static final Dimension INITAL_SIZE = new Dimension(FIXED_WIDTH, 620); 

    public MainFrame() { 
     super(); 

     setPreferredSize(INITAL_SIZE); 
     setResizable(false); 

     setTitle("My Application"); 
     setLayout(new MigLayout("fill")); 

     JButton logOutButton = new JButton("LogOut"); 

     logOutButton.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) 
      { 
       // Execute when button is pressed: 
       System.out.println("You clicked the button"); 

      } 
     }); 

     add(logOutButton); 

     pack(); 
     setLocationRelativeTo(null);  // Center the window 

    } 


} 

Мои проблема заключается в следующем:

Как вы можете видеть в классе GUI.java, определяется метод shutdown() (который определен в SingleFrameApplication класс abstact). Вот документация для этого метода: shutdown doc

Чтение документации:

Сохранить состояние сеанса для иерархии компонентов коренится в мэйнфреймов.

Когда пользователь нажимает на JButton, который объявлен внутри класса MainFrame, Я хотел бы метод shutdown() (который объявлен в классе GUI) должны быть выполнены.

У вас есть решение проблемы с этим?

Спасибо

Andrea

+0

Первое, что вам нужно, это MainFrame на самом деле знать о вашем объекте GUI. Для этого вам, вероятно, нужно передать объект GUI («this») в качестве аргумента в конструктор MainFrame, где вы можете сохранить его в поле в MainFrame. Затем вы можете использовать прослушиватель событий или другой метод для вызова метода выключения в экземпляре GUI MainFrame. – Domi

ответ

1

Вы можете использовать PropertyChanges. Попросите GUI реализовать PropertyChangeListener. Затем запустите MainFrame при изменении кнопки при изменении свойства. В GUI это изменение свойства захватывается и выполняется команда отключения. См. this example для получения дополнительной информации.

Что-то вроде:

в классе GUI:

public class GUI extends SingleFrameApplication implements PropertyChangeListener { 

...

MainFrame mainFrame = new MainFrame(); 
mainFrame.addPropertyChangeListener(this); 

...

@Override 
public void propertyChange(PropertyChangeEvent arg0) { 
    if (arg0.getPropertyName().equals("buttonClicked")) { 
     shutdown(); 
    } 
} 

Тогда в MainFrame

 public void actionPerformed(ActionEvent e) 
     { 
      // Execute when button is pressed: 
      System.out.println("You clicked the button"); 
      firePropertyChange("buttonClicked", false, true); 
     } 
+0

mmm Я добавил PropertyChangeListener в свои классы GUI, что мне делать, чтобы запустить изменение свойства, когда пользователь нажимает кнопку? – AndreaNobili

+1

Я добавил код, дайте мне знать, если у вас есть вопросы. – hankd

+0

Отличная работа, теперь она отлично работает !!! – AndreaNobili

Смежные вопросы