如何使 JOptionPane 对话框在任务栏上显示为任务?
Posted
技术标签:
【中文标题】如何使 JOptionPane 对话框在任务栏上显示为任务?【英文标题】:How can I make JOptionPane dialogs show up as a task on the taskbar? 【发布时间】:2010-10-07 06:28:32 【问题描述】:编辑:
问题遵循横向规则;我自己的答案在它之前。
在Oscar Reyes 的帮助下,我设计了这个解决方案:
import javax.swing.JOptionPane;
import javax.swing.JFrame;
public class MyApp extends JFrame
public static void main(String [] args)
new MyApp();
public MyApp()
super("MyApp");
setUndecorated(true);
setVisible(true);
setLocationRelativeTo(null);
String i = JOptionPane.showInputDialog(this, "Enter your name:", getTitle(), JOptionPane.QUESTION_MESSAGE);
if(null != i)
JOptionPane.showInputDialog(this, "Your name is:", getTitle(), JOptionPane.INFORMATION_MESSAGE, null, null, i.concat(i));
dispose();
请注意,我也在 JOptionPane.showInputDialog 中显示我的输出。这样输出在文本字段中突出显示,因此我可以简单地按 CTRL+C 将输出复制到系统剪贴板,然后按 ESC 驳回申请。
我为我的简单应用程序创建了一个简单的 GUI。我的应用程序提示输入带有JOptionPane.showInputDialog
的单个输入,执行计算,然后显示带有JOptionPane.showMessageDialog
的单个输出。我有时会切换到最大化的浏览器窗口或其他要从中复制的内容,然后想切换回我的 JOptionPane 对话框进行粘贴。
我想让我的 JOptionPane 对话框在任务栏上显示为一个任务,这样我就可以像几乎任何其他正在运行的程序一样切换到它。我更喜欢 JOptionPane 的简单性,而不是必须创建 JFrame、FlowLayout、Icon、JTextField、JButton、ActionListener 等等。
JOptionPane 可以作为任务显示在任务栏上吗? 如果是这样,我如何让它显示出来? 如果没有,还有其他像JOptionPane.show[whatever]dialog()
这样的单行代码吗?
【问题讨论】:
您应该将您的答案作为答案发布在下面,并在此处仅留下问题。 【参考方案1】: JOptionPane 可以作为任务显示在任务栏上吗?没有
如果没有,还有什么像 JOptionPane.show[whatever]dialog() 这样的单行代码吗?不完全是一个班轮(但一些额外的 6 行:P)
我敢打赌,您可以很容易地将所有这些都放在一个实用方法中,并在需要时通过一次调用来调用它。
以下代码将为您的应用添加一个任务栏。
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class OptionTest
public static void main ( String [] args )
JFrame frame = new JFrame("My dialog asks....");
frame.setUndecorated( true );
frame.setVisible( true );
frame.setLocationRelativeTo( null );
String message = JOptionPane.showInputDialog(frame,
"Would this be enough?.",
"My dialog asks....",
JOptionPane.INFORMATION_MESSAGE);
System.out.println( "Got " + message );
frame.dispose();
顺便说一句,在 Windows Vista 中,我可以使用 Alt+Tab 切换到 OptionPane,无需任何其他操作(虽然我在任务栏中看不到它)
【讨论】:
我也可以在 XP 中使用 Alt+Tab 键;这不是什么新鲜事。有时我会忘记它的存在并再次启动它,但当我最小化其他所有内容时却发现了一些未使用的实例。 我想知道你是否不能(这会很奇怪)。那么,您对使用如图所示的框架有何看法?如果您将其打包在函数上,您几乎可以拥有您期望的相同的一行行为(毕竟这正是“showInputDialog 所做的”将一堆调用打包成一个。 我发现你的代码编译完美,顺便说一下不导入java.awt.*。 啊,是的。可能我最初使用 showXX( ( Component ) null 等) 并没有删除 awt 的东西 添加框架并让它成为 JOptionPane 对话框的父级非常适合我正在做的事情。【参考方案2】:这个问题取决于平台。在我的系统上,带有 OpenBox 的 Debian Linux,JOptionPanes 总是出现在任务栏上。我无法阻止任何 JDialog 出现在任务栏上。
【讨论】:
我刚刚做了另一个测试。触发了一个单行 java 应用程序:javax.swing.JOptionPane.showMessageDialog(null, "test")。 XP 和我的 Linux 的行为不同。这并不奇怪,因为任务栏是操作系统元素,Java 文档中没有提到。因此,它依赖于平台。为什么11k声望的人会做出这种新手式,仓促和混乱的cmets? 我说的评论被删除了。以上是关于如何使 JOptionPane 对话框在任务栏上显示为任务?的主要内容,如果未能解决你的问题,请参考以下文章
如何让弹出对话框JOptionPane.showConfirmDialog在不用点击"确定"的情况下,可以在给定时间内自动关闭呢?