Java TrayIcon.displayMessage () и переводы строк - PullRequest
2 голосов
/ 11 марта 2011

Я пишу Java-приложение со значком SystemTray, и я хотел бы добавить разрывы строк в «сообщение об отображении» в TrayIcon, но обычный трюк HTML не работает (как это происходит внутри JLabels).).

В приведенном ниже примере переменная trayIcon имеет тип "java.awt.TrayIcon".

trayIcon.displayMessage("Title", "<p>Blah</p> \r\n Blah <br> blah ... blah", TrayIcon.MessageType.INFO);

Java игнорирует \ r \ n, но отображает HTML-теги.

Есть идеи?

Если нет, я буду использовать JFrame или что-то еще.

ОБНОВЛЕНИЕ: похоже, это проблема для конкретной платформы, и я должен был указать свою ОС в вопросе: мне это нужно для работы в Windows и Linux.

Нишан показал, что \ n работает в Windows, и я подтвердил, что у меня есть окно Vista, которое у меня теперь есть.Это выглядит как будто мне нужно сделать что-то нестандартное с JFrame или с окном сообщений

Приветствую, ребята

Ответы [ 2 ]

2 голосов
/ 30 апреля 2013

Как уже упоминалось здесь , невозможно отобразить новые строки в сообщениях с иконками в трее в Linux.

Только сейчас появилась хитрая идея, которая сработала для меня.Наблюдаемое количество символов, отображаемых в строке в сообщении.Для меня это показывает 56 символов в строке.

Итак, если строка содержит менее 56 символов, заполните пробел, чтобы сделать его 56 символов.

Знал, что это ненадлежащим образом, но не мог найти другие альтернативы.Теперь мой результат соответствует ожиданиям.

private java.lang.String messageToShow = null;
private int lineLength = 56;
/*This approach is showing ellipses (...) at the end of the last line*/
public void addMessageToShow(java.lang.String messageToShow) {
        if (this.messageToShow == null){
            this.messageToShow = messageToShow;
        }else{
            this.messageToShow += "\n" + messageToShow;//Working perfectly in windows.
        }
        if (System.getProperty("os.name").contains("Linux")){
            /*
             Fill with blank spaces to get the next message in next line.
             Checking with mod operator to handle the line which wraps 
             into multiple lines
            */
            while (this.messageToShow.length() % lineLength > 0){
                this.messageToShow += " ";
            }
        }
    }

Итак, я попробовал другой подход

/*This approach is not showing ellipses (...) at the end of the last line*/
public void addMessageToShow(java.lang.String messageToShow) {
    if (this.messageToShow == null){
        this.messageToShow = messageToShow;
    }else{
        if (System.getProperty("os.name").contains("Linux")){
            /*
             Fill with blank spaces to get the next message in next line.
             Checking with mod operator to handle the line which wraps 
             into multiple lines
            */
            while (this.messageToShow.length() % lineLength > 0){
                this.messageToShow += " ";
            }
        }else{
            this.messageToShow += "\n";// Works properly with windows
        }
        this.messageToShow += messageToShow;
    }
}

И наконец

trayIcon.displayMessage("My Title", this.messageToShow, TrayIcon.MessageType.INFO);
2 голосов
/ 11 марта 2011

Добавление \ n работает для меня:

"<HtMl><p>Blah</p> \n Blah <br> blah ... blah"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...