2013-12-09 4 views
0

Я создаю диалог About для моей программы и столкнулся с проблемой. Всякий раз, когда я запускаю диалог, текст заголовка устанавливается правильно, но текст внутри диалогового окна говорит «Сообщение JOptionPane». Прежде чем он даже не покажет ярлык, который я добавил в диалоговом окне, но это исправлено (я не совсем уверен, как), но теперь он отображает как добавленный текст, так и сообщение «JOptionPane Message».JDialog не отображает правильный текст

Код для диалога:

about.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent ae) { 
      JOptionPane optionPane = new JOptionPane(); 
      JDialog dialog = optionPane.createDialog("About"); 
      JLabel aboutText = new JLabel("Text goes here", JLabel.CENTER); 
      dialog.add(aboutText, BorderLayout.NORTH); 
      dialog.setVisible(true); 
     } 
    }); 

Таким образом, текст теперь работает, что приятно. Но как мне избавиться от части, которая говорит «Сообщение JOptionPane»?

+2

Вопрос в том, что случилось с 'JOptionPane.showMessageDialog (это, aboutText,« About », JOptionPane.INFORMATION_MESSAGE);'? – MadProgrammer

+0

Проблема в том, что я хочу, чтобы конечный результат был логотипом с центром в диалоговом окне, с текстом, отображаемым под ним. Есть ли способ сделать это с помощью showMessageDialog()? Я искал немного, но ничего не нашел –

+0

Да. Вы можете использовать HTML для форматирования 'String' или использовать' JLabel' в качестве объекта сообщения в панели параметров ... – MadProgrammer

ответ

1

Вот что вы делаете, чтобы обеспечить диалог. Кроме того, это всего лишь одна строка кода!

JOptionPane.showMessageDialog(this, "Text goes here", "About", JOptionPane.INFORMATION_MESSAGE); 

Я предполагаю, что этот код находится в подклассе JFrame. Если нет, замените this на любой компонент внутри окна, где вы хотите открыть диалоговое окно, или просто null для центра экрана.

Вы также можете изменить «Текст идет сюда» на свой собственный текст сообщения.

Чтобы изменить тип сообщения, изменить JOptionPane.INFORMATION_MESSAGE к одному из следующих способов:

  • JOptionPane.ERROR_MESSAGE
  • JOptionPane.WARNING_MESSAGE
  • JOptionPane.QUESTION_MESSAGE
  • JOptionPane.PLAIN_MESSAGE
+0

Что случилось с использованием 'JLabel'? ;) – MadProgrammer

+0

@MadProgrammer Нет ничего плохого. Это просто проще. – tbodt

+0

Это будет зависеть от того, чего вы хотите достичь;) - Нет ничего плохого в вашем ответе вообще, хотя – MadProgrammer

2

Я думаю, что люди забывают, насколько мощный JOptionPane ca п ...

Если поставить String в качестве messageObject, JOptionPane создаст JLabel, чтобы отобразить его, если поставить какой-то Component, JOptionPane будет просто использовать его вместо того, чтобы, к примеру ...

enter image description here

JLabel label = new JLabel("Bring it on"); 
label.setIcon(new ImageIcon("logo.png")); 
label.setHorizontalAlignment(JLabel.CENTER); 
label.setVerticalTextPosition(JLabel.BOTTOM); 
label.setHorizontalTextPosition(JLabel.CENTER); 
JOptionPane.showMessageDialog(null, label, "About", JOptionPane.PLAIN_MESSAGE); 
+0

Это именно то, что мне нужно, спасибо! Установка ответа @ tbodt в качестве решения, поскольку это более актуально для исходного вопроса. Я не знал о 'setIcon()', и если я не ошибаюсь, вы можете использовать только один ярлык в 'showMessageDialog()', поэтому я пошел на JDialog. Еще раз спасибо! –

+0

@ThomasRamage См. Мой ответ за то, почему это произошло. Также вы можете дать upvotes, а также принять ответ, чтобы показать, что он по-прежнему полезен. –

+0

@ThomasRamage Это будет зависеть от ваших потребностей. Вы можете так же легко передать 'JOptionPane'' JPanel' с другими добавленными к нему компонентами, например ... – MadProgrammer

0

Это происходит потому, что вы используете конструктор по умолчанию new JOptionPane(). От docs:

Создает JOptionPane с тестовым сообщением.

Этот тест сообщение "JOptionPane Message"

Если вы используете конструктор new JOptionPane("A Message") то сообщение будет "A Message", где этот конструктор принимает объект, чтобы с помощью ярлыка код станет

JLabel aboutText = new JLabel("Text goes here", JLabel.CENTER); 
JOptionPane o = new JOptionPane(aboutText); 
JDialog dialog = optionPane.createDialog("About"); 
dialog.setVisible(true); 

Вы также может использовать конструктор new JOptionPane(null), чтобы не иметь объекта или сообщения по умолчанию, поэтому вы можете добавить их позже, если хотите.

Смежные вопросы