如何使 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 消息对话框在渲染后消失

如何使 WPF 窗口在任务栏上闪烁?

如何让弹出对话框JOptionPane.showConfirmDialog在不用点击"确定"的情况下,可以在给定时间内自动关闭呢?

格式化美元的负货币以在 JOptionPane 对话框中显示减号 [重复]

没有按钮的 JOptionPane

Swing中弹出对话框的几种方式_JOptionPane.showMessageDialog等详解