Мне нужно иметь длинный описательный диалог в части моей программы, и он по-разному отображается в Mac и Windows. На Mac кажется, что слово обертывает текст и разбивает его на 3 или 4 строки, но на ПК он просто создает очень длинный диалог. Вот код, который показывает мои проблемы:

public class Test extends JFrame{

import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Test extends JFrame{
private String suggestion = "eee eee eeee eeee eeeerr rrrrr rrrrrrrr rrrrrr " +
        "rrrrrr rrrrrrrrr  rrrrrr rrrrr tttttt ttttttttttt ttttt tttttttttt ttt" +
        " tttt tttttt ttttttttttt reroew uewurkpe jwrkl;ejr kejk ejrk;jewr;jeklr " +
        "jk jre;wlj;ewjr;ej lejrlkejlkejlkjerl  ejlrj kleklr jekl jlek " +
        "rjklejrklejrklekl ";
public void showDialog()
{
           JOptionPane.showMessageDialog(this,
                                  suggestion,
                                  "title",
                                  JOptionPane.INFORMATION_MESSAGE,
                                  null);
}
public static void main(String [] args)
{
    Test test = new Test();
    test.showDialog();
}
}

Когда я запускаю это в Windows, он просто создает одну огромную строку текста в длинном диалоге, но на Mac он создает несколько строк с диалогом правильного размера.

2
Mike2012 1 Сен 2009 в 01:12

2 ответа

Лучший ответ

Компонент JOptionPane имеет свойство только для чтения (MaxCharactersPerLineCount) для максимального количества символов в строке. По умолчанию это Integer.MAX_VALUE. Создав подкласс JOptionPane, вы можете переопределить этот параметр. Изменение этого параметра позволяет компоненту переносить слова, когда сообщение действительно длинное.

http://java.sun.com/developer/JDCTechTips/2004/tt0122.html

4
Stefan Kendall 1 Сен 2009 в 01:15
Интересно, чем отличается Mac от ПК.
 – 
hhafez
1 Сен 2009 в 01:26
Swing будет делать это между Mac и Windows / Linux. В предыдущем проекте у меня было столько ад, чтобы все работало правильно на Mac, особенно в отношении отображения текста. Я не удивлен, что это работает по-другому.
 – 
Stefan Kendall
1 Сен 2009 в 01:42

Если вы предпочитаете управлять переносом слов самостоятельно, передайте массив строк в showMessageDialog. Каждая строка появится в отдельной строке. Это работает на любой платформе.

 private String s1 = "eee eee eeee eeee eeeerr rrrrr rrrrrrrr rrrrrr";
 private String s2 = "rrrrrr rrrrrrrrr  rrrrrr rrrrr tttttt ttttttttttt ttttt tttttttttt ttt";
 private String s3 = "tttt tttttt ttttttttttt reroew uewurkpe jwrkl;ejr kejk ejrk;jewr;jeklr";
 private String s4 = "rjklejrklejrklekl";
 private String s5 = "eee eee eeee eeee eeeerr rrrrr rrrrrrrr rrrrrr";
 private String[] suggestion = new String[] {s1, s2, s3, s4, s5};
 public void showDialog()
{
       JOptionPane.showMessageDialog(this,
                              suggestion,
                              "title",
                              JOptionPane.INFORMATION_MESSAGE,
                              null);
}
1
Larry Tesler 29 Май 2011 в 06:11