我想创建一个具有两个特定特性的JFrame:
1.当从最小化状态最大化时,JFrame不应捕获焦点。
1.当创建JFrame或从最小化状态变为最大化时,它应该在Windows栏中 Flink ,直到用户将焦点授予它。(就像ICQ客户端x1c 0d1x中那样)。
有没有人知道如何落实第二项要求?
一个小小的自我解释的例子:
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();
}
});
}
}
谢谢!
3条答案
按热度按时间nkcskrwz1#
下面的代码完全符合您的描述:
f是一个JFrame。
fgw7neuy2#
不幸的是,这并不是任何Java平台都能实现的。任何人如果想通过使用你所展示的那种“技巧”来让它工作,都会失望地发现,它不太可能在其他版本的Windows上工作。甚至是另一台装有相同版本Windows的计算机。我唯一我曾经见过Java窗口 Flink 是由于Swing在将所有窗口最小化到任务栏时出现了一些小故障。
如this article on making Java applications feel native所示,在Mac OS上也是如此。
你最好的选择是使用上面文章中描述的技术来创建一个JNI来调用Windows API,或者获得一个JNIWrapper(搜索它)的许可证,它可以为你做所有的事情(如果你正在制作一个商业应用程序,或者为一个愿意为这样一个特性付费的客户制作它,这是最好的选择)。
我唯一能建议的是创建一个穷人的弹出式通知系统。当你想提醒用户时,创建一个没有边框的Frame,把它放在屏幕的右下角,使它不可聚焦,并显示一小段时间。
jbose2ul3#
JPanel不 Flink 。请尝试使用JPanel代替JFrame。