开发者

Java TrayIcon.displayMessage() and line-breaks

I'm writing a Java app with a SystemTray icon, and I'd like to put line-breaks into the TrayIcon's "display message", but the normal html trick doesn't seem to work (like it does inside JLabels).

In the example below, the trayIcon variable below is of type 开发者_Python百科"java.awt.TrayIcon".

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

Java ignores the \r\n, but displays the html tags.

Any ideas?

If not, I'll use a JFrame or something.

UPDATE: it seems to be a platform-specific issue, and I should have specified my OS in the question: I need this to work on Windows and Linux.

Nishan showed that a \n works on Windows, and I confirmed with a Vista box I now have next to me. It looks like I'll need to make something custom with a JFrame or a messagebox

Cheers guys


Appending \n worked for me :

"<HtMl><p>Blah</p> \n Blah <br> blah ... blah"


As mentioned here, it is not possible to show new lines in tray icon messages in Linux.

Just now got a tricky idea which worked for me. Observed number of characters getting displayed per line in the message. For me it is showing 56 characters per line.

So, if a line has got less than 56 characters, fill the gap with spaces to make it 56 characters.

Knew this is not a proper way but could not find other alternatives. Now my output is as expected.

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 += " ";
            }
        }
    }

So, i tried another approach

/*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;
    }
}

And finally

trayIcon.displayMessage("My Title", this.messageToShow, TrayIcon.MessageType.INFO);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜