Использование пользовательских значков в заголовке с JOptionPane.showInputDialog - PullRequest
1 голос
/ 13 октября 2010

Я пытаюсь использовать обычный значок в заголовке панели JOption, а не с меткой. Есть ли способ, которым я могу это сделать? Я использую класс Icon (как показано ниже) в JOptionPane, но он продолжает отображать значок в основной области отображения, а не в заголовке. Вот код:

Icon icon = new ImageIcon(ApplicationManager.getApplicationImage().getImage());
String jid = (String)JOptionPane.showInputDialog(ApplicationManager.getMainWindow(), 
                 Res.getString("label.enter.address"), 
                 Res.getString("title.start.chat"), 
                 JOptionPane.QUESTION_MESSAGE, 
                 icon,                    
                 null, 
                 selectedUser);

Спасибо

Ответы [ 4 ]

3 голосов
/ 13 октября 2010

Попробуйте этот код ..

import javax.swing.JOptionPane;
import javax.swing.JDialog;
import javax.imageio.ImageIO;
import java.awt.Image;
import java.net.URL;

class OptionPaneIcon {

    public static void main(String[] args) throws Exception {
        JOptionPane jop = new JOptionPane(
            "Message",
            JOptionPane.QUESTION_MESSAGE,
            JOptionPane.DEFAULT_OPTION
            );

        JDialog dialog = jop.createDialog("Dialog Title");

        Image image = ImageIO.read(new URL(
            "http://www.gravatar.com/avatar/f1d58f7932b6ae8027c4e1d84f440ffe?s=128&d=identicon&r=PG"));
        dialog.setIconImage( image );
        dialog.setVisible(true);
    }
}
1 голос
/ 21 октября 2010

JOptionPane берет свой значок из родительского фрейма.Таким образом, вы можете установить значок на фиктивном JFrame и передать его в вызов JOptionPane:

    BufferedImage image = ImageIO.read(new URL(
    "http://www.gravatar.com/avatar/f1d58f7932b6ae8027c4e1d84f440ffe?s=128&d=identicon&r=PG"));
    JFrame frame = new JFrame();
    frame.setIconImage(image);
    JOptionPane.showInputDialog(frame, "Enter Address", "Chat",
            JOptionPane.QUESTION_MESSAGE, null, null, "");

Обратите внимание, что это может вызвать проблемы с расположением показанного диалога, так как он будет расположен относительнопустышка JFrame прошла.

1 голос
/ 13 октября 2010

Не пробовал, но вы можете заставить его работать с внутренним фреймом вместо использования диалогового окна. Попробуйте создать экземпляр JOptionPane и позвоните getInternalFrame(). JInternalFrame имеет метод setFrameIcon(Icon icon).

Редактировать: Конечно, родитель JInteralFrame должен быть JDesktopPane, но кроме этого он должен работать.

0 голосов
/ 19 октября 2010

HI,

Это не будет работать, так как у меня есть какое-то предварительно выбранное значение, которое мне нужно заполнить диалоговым окном ввода, и, следовательно, я не могу использовать конструктор JOptionPane, но вместо этого должен использовать метод showInputDialog ..

Следовательно, я считаю, что я не могу использовать обычный значок при использовании showInputDialog (.,.,.,.,.,...)

Спасибо.

...