



Два JFrame находятся в состоянии Frame.ICONIFIED (свернуты) - когда один из них восстанавливается до состояния Frame.NORMAL, другой также получает нормальное состояние. Это достигается за счет реализации java.awt.event.WindowStateListener для обоих фреймов. Вот демонстрационная программа:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class TwoJframes implements WindowStateListener {
private JFrame frame;
private JFrame frame2;
public static void main(String [] args) {
new TwoJframes().gui();
}
private void gui() {
frame = new JFrame();
frame.setTitle("JFrame 1");
JButton button = new JButton("Show Frame 2");
button.addActionListener(e -> showAnotherFrame());
frame.addWindowStateListener(this);
frame.add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setSize(250, 100);
frame.setVisible(true);
}
private void showAnotherFrame() {
frame2 = new JFrame();
frame2.setTitle("JFrame 2");
frame2.addWindowStateListener(this);
frame2.add(new JLabel("2nd frame"));
frame2.setSize(250, 100);
frame2.setLocation(300, 300);
frame2.setVisible(true);
}
// This is the WindowStateListener's implementation method
@Override public void windowStateChanged(WindowEvent e) {
JFrame f = (JFrame) e.getSource();
if (f == frame) {
if ((frame.getExtendedState() == Frame.NORMAL) &&
(frame2.getExtendedState() == Frame.ICONIFIED)) {
frame2.setExtendedState(Frame.NORMAL);
}
}
if (f == frame2) {
if ((frame2.getExtendedState() == Frame.NORMAL) &&
(frame.getExtendedState() == Frame.ICONIFIED)) {
frame.setExtendedState(Frame.NORMAL);
}
}
}
}
Так в чем же проблема? Два jframes должны быть открыты из основного класса, и этот основной класс реализует WindowStateListener.
Хорошо, слушайте, когда я запускаю программу, я делаю один Jframe видимым, когда пользователи нажимают на какую-то кнопку, я делаю видимым и другой Jframe. У меня есть кнопка в первом Jframe, который на Mousepress ICONFIES как Jframes, но я не знаю, где создать событие, которое установит оба этих состояния в NORMAL, когда пользователь выберет одно из них на панели задач.
Вы реализовали интерфейс слушателя и метод переопределения windowStateChanged?
Спасибо, Прасад, я кое-что сделал с ним, и теперь он у меня отлично работает.
Эй, Прасад, спасибо за этот код. Я довольно близок к этому. Но у меня есть одна проблема. Смотрите, у меня уже есть два JFrames, разработанные с использованием функции перетаскивания netbeans. Я использовал ваш код в новом классе, но где мне вызвать методы этого класса? или как связать его с другими JFrames, которые у меня есть? пожалуйста спасибо.