java - 当 JFrame 最小化时 setState(JFrame.ICONIFIED) 但是当用户从任务栏恢复它时在哪里写入事件代码
问题描述
当用户单击最小化时,我的程序会最小化两个框架,并且它们在任务栏中的显示方式都不同,但是我希望当用户在任务栏中单击它们中的任何一个时,它们都可以恢复以在屏幕上查看。
解决方案
两个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);
}
}
}
}
推荐阅读
- javascript - 根据页面内的用户选择多次获取远程数据
- web-scraping - 网页抓取返回空列表
- oracle - 在 Oracle 中创建之前检查包是否存在
- javascript - 为什么 fetching(API) 给我未定义?
- c - 链接器没有足够的 ROM
- python - 数组元素的并行处理
- c# - aspnet-sessionid 布局渲染器未使用 NLog 日志记录框架将 sessionid 保存在数据库中
- r - 有没有办法在 r 中使用 ggplot 组合由多个变量分组的两个图?
- android - 下载时如何取消灵活的应用内更新?
- nativescript - 如何在 NativeScript Angular 中隐藏元素?