Как я могу сделать так, чтобы диалоговые окна JOptionPane отображались как задача на панели задач?

Редактировать:

Вопрос следует горизонтальному правилу; мой собственный ответ предшествует этому.


Основываясь на помощи Оскара Рейеса, я создал это решение:

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 отклонить заявку.


Я создал тривиальный графический интерфейс для своего тривиального приложения. Мое приложение запрашивает один ввод с JOptionPane.showInputDialog, выполняет вычисление, а затем отображает один вывод с JOptionPane.showMessageDialog. Иногда я переключаюсь на развернутое окно браузера или что-то еще, из чего нужно скопировать, а затем хочу вернуться к своему диалоговому окну JOptionPane для вставки.

Я хочу, чтобы мой диалог JOptionPane отображался как задача на панели задач, чтобы я мог переключаться на него, как почти на любую другую запущенную программу. Я предпочитаю простоту JOptionPane, а не создавать JFrame, FlowLayout, Icon, JTextField, JButton, ActionListener и так далее, и так далее.

  • Может ли JOptionPane отображаться как задача на панели задач?
  • Если да, то как мне его отобразить?
  • Если нет, то есть ли что-нибудь еще однострочное, например JOptionPane.show[whatever]dialog()?

person eleven81    schedule 12.02.2009    source источник
comment
Вы должны опубликовать свой ответ как ответ ниже, а здесь оставить только вопрос.   -  person Alexey Ivanov    schedule 22.04.2015


Ответы (2)


  • Может ли JOptionPane отображаться как задача на панели задач?

No

  • Если нет, есть ли еще что-нибудь, что является однострочным, например JOptionPane.show [something] dialog ()?

Не совсем один лайнер (но несколько дополнительных 6 строк: P)

Бьюсь об заклад, вы можете довольно легко поместить все это в метод utlity и вызывать его, когда вам это нужно, с помощью одного вызова.

Следующий код добавит панель задач для вашего приложения.

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 я могу переключиться на OptionPane с помощью Alt + Tab без чего-либо другого (хотя я не вижу его на панели задач, как вы сказали)

person OscarRyz    schedule 12.02.2009
comment
Я также могу использовать Alt + Tab в XP; в этом нет ничего нового. Иногда я забываю, что он есть, и запускаю его снова, только чтобы найти несколько неиспользуемых экземпляров, когда я сворачиваю все остальное. - person eleven81; 12.02.2009
comment
Мне было интересно, не могли бы вы (что было бы очень странно). Итак, что вы думаете об использовании рамки, как показано на рисунке? Если вы упакуете это в функцию, вы можете в значительной степени иметь такое же поведение одной строки, которое вы ожидаете (после всего, что именно то, что showInputDialog действительно упаковывает кучу вызовов в один. - person OscarRyz; 12.02.2009
comment
Я считаю, что ваш код отлично компилируется без импорта java.awt. *, Кстати. - person eleven81; 12.02.2009
comment
ааа да. Вероятно, я изначально использую showXX ((Component) null и т. Д. И т. Д.) И не удалял материал awt - person OscarRyz; 12.02.2009
comment
Добавление кадра и использование его в качестве родителя диалоговых окон JOptionPane отлично подходит для того, что я делаю. - person eleven81; 12.02.2009
comment
Что вы там делали с двойными скобками и вызовами методов? Это называется внутренним классом? Javac создает файл OptionTest $ 1.class. Я устранил это, используя frame.setUndecorated (true); frame.setVisible (правда); frame.setLocationRelativeTo (ноль); и устранение этого блока. - person eleven81; 12.02.2009
comment
Ах да, так лучше. Я пытался создать онлайн-экземпляр, например: showXXXDialog (новый JFrame (t) {{setUndec .. setVisi. Etc}}, dialog, title); ] Но потом я понимаю, что ссылка нужна для удаления. Итак, я создал переменную, но просто не захотелось поправлять двойную скобку :) - person OscarRyz; 12.02.2009
comment
И да, это анонимный внутренний класс, потому что вы не можете ссылаться на него по имени. Компилятор создал .class с именем, подобным описанному вами. - person OscarRyz; 12.02.2009

Этот вопрос зависит от платформы. В моей системе Debian Linux с OpenBox JOptionPanes всегда отображается на панели задач. Я не могу предотвратить появление JDialog на панели задач.

person Jarekczek    schedule 16.10.2011
comment
Я только что сделал еще один тест. Запустил однострочное java-приложение: javax.swing.JOptionPane.showMessageDialog (null, test). XP и мой Linux ведут себя с ним по-разному. Это неудивительно, поскольку панель задач - это элемент операционной системы, не упомянутый в документации java. Таким образом, это зависит от платформы. Почему люди с репутацией 11k делают такие поспешные и запутанные комментарии в стиле новичков? - person Jarekczek; 17.10.2011
comment
Комментарий, о котором я говорил, был удален. - person Jarekczek; 18.10.2011