我想创建一个具有两个特定功能的JFrame:
有人知道如何实施第二项要求吗?
很少自我解释的例子:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class JFrameTest {
private static JFrame childFrame;
public static Container getParentContentPane() {
JPanel panel = new JPanel();
JButton button = new JButton("Create\\Restore child frame");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
createOrRestoreChildFrame();
}
});
panel.add(button);
return panel;
}
private static void createOrRestoreChildFrame() {
if (childFrame == null) {
childFrame = new JFrame("Child Frame");
childFrame.setLocation(200, 200);
childFrame.add(new JLabel("Child Frame"));
childFrame.pack();
setChildFrameVisible();
} else {
setChildFrameVisible();
}
}
private static void setChildFrameVisible() {
childFrame.setFocusableWindowState(false);
childFrame.setVisible(true);
flashInWindowsBar(childFrame);
childFrame.toFront();
childFrame.setFocusableWindowState(true);
}
/**
* Should Make child frame flash in Windows bar.
* Currently, it does not work for me.
* Could anybody help me to fix this please? )
*/
private static void flashInWindowsBar(JFrame childFrame) {
childFrame.setState(JFrame.ICONIFIED);
childFrame.toFront();
}
private static void createAndShowGUI() {
JFrame parentFrame = new JFrame("JFrame Demo");
parentFrame.setLocation(100, 100);
parentFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
parentFrame.setContentPane(getParentContentPane());
parentFrame.pack();
parentFrame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
谢谢!
答案 0 :(得分:1)
以下代码完全按照您的描述为我工作:
f.setState(JFrame.ICONIFIED);
f.toFront();
f是JFrame。
答案 1 :(得分:1)
不幸的是,这不是您可以在任何Java平台下本地执行的操作。任何设法通过使用你所展示的那种“技巧”来使其工作的人都会失望地发现它不太可能适用于其他版本的Windows,甚至是另一台具有相同版本Windows的计算机。我曾经见过Java窗口闪存的唯一一次是由于Swing在最小化任务栏的所有窗口时出现了一些故障。
如this article on making Java applications feel native所示,在Mac OS上也是如此。
您最好的选择是使用上面文章中描述的技术制作一个执行Windows API调用的JNI,或者获取 JNIWrapper (搜索它)的许可证您(如果您正在制作商业应用程序,或者是为愿意为此类功能付费的客户制作商品应用程序的最佳选择)。看起来你可以为此进行30天的试用。
我唯一可以建议的是创建一个穷人相当于弹出通知系统。当您想要提醒用户时,请创建一个没有边框的框架,将其放在屏幕的右下角,使其不可聚焦并在短时间内显示。