Если это приложение Свинг (вы еще не сказали нам), то вы может решить ваш прямой вопрос, поставив в код ActionListener JButton, что ca lls setVisible(false)
в текущем окне, если вы будете использовать его снова или dispose()
на нем, если вы его больше не будете использовать, а затем вызывает setVisible(true)
на следующем объекте окна, который вы хотите отобразить. Это может быть так же просто:
myButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ThisGuiClass.this.setVisible(false);
newGUI.setVisible(true);
}
});
, но еще остались без ответа вопросы.
- Опять же, это графический интерфейс Swing? Конкретные решения будут зависеть от используемой библиотеки GUI.
- Особенности решения кода также будут полностью зависеть от конкретной структуры кода и программы, которые вы используете, чего вы нам не показали. Пожалуйста, показать нам код, если вам нужен лучший ответ.
- Опять же, я согласен с моей рекомендацией минимизировать окна, которые бросаются на пользователя, чтобы использовать использование CardLayout для обмена мнениями по одному окну, если это возможно, и ограничить использование 2-го окна модальными JDialogs (как много насколько это возможно). Большая ссылка на это остается ссылка, The Use of Multiple JFrames, Good/Bad Practice?
Редактировать
ОК, я видел, что вы добавили свинг и AWT тег, спасибо, но я до сих пор считаю, что мой ответ пока еще очень неполна, поскольку вопрос все еще не завершен.
Edit 2
на основе кода, я бы стоять на своих первоначальных рекомендаций и будет использовать CardLayout поменять "мнения" JPanel. Например, запустить это:
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.*;
@SuppressWarnings("serial")
public class NumberConverterWithCardLayout extends JPanel {
private CardLayout cardlayout = new CardLayout();
private JPanel cardPanel = new JPanel(cardlayout);
private BinaryPanel binaryPanel = new BinaryPanel();
private OctalPanel octalPanel = new OctalPanel();
private HexadecimalPanel hexadecimalPanel = new HexadecimalPanel();
private DecimalPanel decimalPanel = new DecimalPanel();
private JPanel[] allPanels = { binaryPanel, octalPanel, hexadecimalPanel,
decimalPanel };
public NumberConverterWithCardLayout() {
JPanel buttonPanel = new JPanel(new GridLayout(1, 0, 5, 0));
setLayout(new BorderLayout());
add(cardPanel, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.PAGE_END);
cardPanel.add(createIntroPanel(), "intro");
for (final JPanel jPanel : allPanels) {
cardPanel.add(jPanel, jPanel.getName());
buttonPanel.add(new JButton(new AbstractAction(jPanel.getName()) {
@Override
public void actionPerformed(ActionEvent evt) {
cardlayout.show(cardPanel, jPanel.getName());
}
}));
}
}
private JPanel createIntroPanel() {
JPanel introPanel = new JPanel(new GridBagLayout());
introPanel.add(new JLabel("Introductory panel which introduces me and the program"));
return introPanel;
}
private static void createAndShowGui() {
NumberConverterWithCardLayout mainPanel = new NumberConverterWithCardLayout();
JFrame frame = new JFrame("Number Converter Application");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class BinaryPanel extends JPanel {
public static final String NAME = "Binary";
private static final int PREF_W = 500;
private static final int PREF_H = 400;
public BinaryPanel() {
setName(NAME);
add(new JLabel("A complex GUI that does binary calculations will go here"));
}
@Override
// just to give it some size
public Dimension getPreferredSize() {
return new Dimension(PREF_W, PREF_H);
}
}
class OctalPanel extends JPanel {
public static final String NAME = "Octal";
public OctalPanel() {
setName(NAME);
add(new JLabel("A GUI that does octal calculations will go here"));
}
}
class HexadecimalPanel extends JPanel {
public static final String NAME = "Hexadecimal";
public HexadecimalPanel() {
setName(NAME);
add(new JLabel("A GUI that does hexadecimal calculations will go here"));
}
}
class DecimalPanel extends JPanel {
public static final String NAME = "Decimal";
public DecimalPanel() {
setName(NAME);
add(new JLabel("A GUI that does decimal calculations will go here"));
}
}
Конечно, расчет JPanels будет гораздо сложнее, проведение вложенного JPanels каждый со своим собственным менеджером компоновки, JTextFields, JButtons, и все, что еще будет необходим для реализации их функциональности.
Редактировать 3
На самом деле, думать над этим, даже это слишком много. Вам гораздо лучше использовать один JPanel с двумя текстовыми полями, один для ввода номера и один для отображения результатов, который имеет пучок кнопок внизу. Затем дисплей изменится в зависимости от того, какая кнопка (какой тип преобразования) нажата. Принцип KISS.
Я предполагаю, что это приложение Swing? Вы никогда не говорите, и используемая библиотека графического интерфейса очень важна, так как изменение в ней сильно изменит ответ. Просьба представить более подробную информацию о вашей проблеме, показать соответствующий код и добавить соответствующие теги к вашему вопросу, чтобы помочь нам лучше понять вашу проблему и привлечь к этому вопросу подходящих экспертов. –
Также спросите себя, сколько профессиональных приложений вы используете для перехода от окна к окну? Не так много, потому что это очень отвлекающий и часто неприятный опыт для пользователя. Большинство используют одно основное окно приложения, которое свопирует представления gui в это окно и при случайном диалоговом окне появляется, когда информация необходима модальным способом. Возможно, вам стоит подумать над эмуляцией этого дизайна. Пожалуйста, посмотрите [Использование нескольких JFrames, Хорошая/Плохая Практика?] (Http://stackoverflow.com/questions/9554636/the-use-of-multiple-jframes-good-bad-practice) –
сэр на самом деле Я работаю над приложением с числовым преобразователем, которое скрывает числа от двоичных до (OCT, DC, HD) и аналогично от других форматов до других форматов (надеюсь, вы получите то, что я имею в виду), У меня есть главное окно с 4 кнопками (Двоичное преобразование, октальное преобразование, e.tc), и когда я нажимаю на кнопку, скажем, Binary Conversion откроет новое окно с именем Binary conversion, но главное окно все еще существует, и я хочу, чтобы он закрывался, когда я нажимаю кнопка . thats all, –