Mike
Mike

Reputation: 1481

Scroll through JLabel held in JScrollPane

I have a JScrollPane that holds a JLabel using the following code:

//Create TEXT LOG JPanel textLogPane = new JScrollPane(logLabel); textLogPane.setPreferredSize(textLogPaneDim); //textLogPane.setOpaque(true); textLogPane.setBorder(BorderFactory.createLineBorder(Color.BLACK)); textLogPane.getViewport().setBackground(Color.DARK_GRAY);

The JLabel, logLabel, is represented by a string with an HTML encoding using
for carriage returns. I display certain images based on the contents of certain lines and I would like to be able to scroll the JScrollPane, textLogPane, to show that line whenever I am displaying that graphic. I know the contents of the line that I want to display but I can't seem to figure out how to get it to scroll down(or up) to the relevant line.

If need be I can change to something other than a JLabel as long as I can keep the HTML encoding and have it look just like multiple lines of text.

Sorry if this is a repeat I tried searching but couldn't find any results.

Thanks

Upvotes: 1

Views: 1100

Answers (2)

camickr
camickr

Reputation: 324098

You don't use "carriage returns" in HTML, you use "br" tags.

I would suggest you should probably be using a JTextPane for multiline text. I also find it easier to not use HTML, but instead to add strings with attributes. You can also insert icons into a JTextPane.

Read the section from the Swing tutorial on Using Text Components for a working example.

Upvotes: 1

Alexander Torstling
Alexander Torstling

Reputation: 18898

You can do some custom maths and use scrollRectToVisible() in your viewport. I don't know how to compute the rect of a specific line in your JLabel. A better solution would be to stick your strings into a JList instead, perhaps with a custom renderer for the html, and use

list.ensureIndexIsVisible(list.getSelectedIndex());

Upvotes: 1

Related Questions