2017-02-04 3 views
0

Я пишу программу на Java с Java Swing. У меня есть класс, который является обычным JPanel (мой класс расширяет JPanel), который является страницей входа в систему. Панель содержит кнопку «Ввод».Панель изменения Java Swing при нажатии кнопки из другого класса

Когда я создаю свой основной JFrame, я добавляю в него панель входа. Когда нажимается кнопка «Ввод», я хочу удалить панель «Вход» и перейти к следующей панели.

Так как я могу сделать свой кадр понимать, когда нажата кнопка «Ввод» из панели входа (они находятся в разных классах), чтобы перейти к следующей странице?

+2

Как? Позвольте мне посчитать пути ... всерьез, их так много. Возможно, родительский класс зарегистрировал 'ActionListener' на панели« LogIn », но более надежным решением было бы использовать какой-то MVC, например [http://stackoverflow.com/questions/26517856/java и [пример] (http://stackoverflow.com/questions/27663306/open-a-jpanel-after-), а также [пример] (http://stackoverflow.com/questions/27663306/open-a-jpanel-after- нажатие-a-button-in-a-jframe/27663749 # 27663749) – MadProgrammer

+1

Вы также должны стать farmiluar с [Pattern наблюдателя] (http://www.oodesign.com/observer-pattern.html) – MadProgrammer

+0

спасибо, я не знал об этом. – user3309479

ответ

0

Чтобы иметь возможность переключения Разногласия между JPanels вложить их в CardLayout:

JPanel cards; 
final static String BUTTONPANEL = "Card with JButtons"; 
final static String TEXTPANEL = "Card with JTextField"; 

//Where the components controlled by the CardLayout are initialized: 
//Create the "cards". 
JPanel card1 = new JPanel(); 
... 
JPanel card2 = new JPanel(); 
... 

//Create the panel that contains the "cards". 
cards = new JPanel(new CardLayout()); 
cards.add(card1, BUTTONPANEL); 
cards.add(card2, TEXTPANEL); 

Вы должны добавить ActonListener к кнопке "Enter":

JButton enterButton = ... 
enterButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
       CardLayout cl = (CardLayout)// your reference to the CardLayout here eg. yourJFrame.getContentPane().getLayout(); 
       cl.show(cards, "The name of panel to show, you gave it with the add operation on cardLayout eg. BUTTONPANEL OR TEXTPANEL"); 
     } 

}); 
+2

Концептуально, управление «действием» является ответственностью «панели» и навигацией ответственности «контейнера», поэтому «панель» должна позволить «контейнеру» знать, когда это делается, и «контейнер», затем должен решить, что с этим делать. Это поддерживает свободную связь и приверженность единой парадигме ответственности. Я только упоминаю об этом, потому что я понятия не имею, где 'enterButton' находится в иерархии;) – MadProgrammer

+0

Yup, но попытайтесь его проработать простым ответом на вопрос: как переключаться на кнопки на кнопку? Будьте моим гостем и улучшите ответ :) –

+2

[Мне не нужно] (http://stackoverflow.com/questions/26517856/java-and-gui-where-do-actionlisteners-belong-according-to-mvc -pattern/26518274 # 26518274) или по крайней мере [не снова] (http://stackoverflow.com/questions/27663306/open-a-jpanel-after-pressing-a-button-in-a-jframe/27663749#27663749) :П – MadProgrammer