I have a bit of an unusual problem: I have a swing label that updates for "Used letters" in the game Hangman. I have it declared like this:
used = new JLabel(" Used: ");
But then i have another area in the code where i add onto it. Here:
used.setText(used.getText() + lUsed + " , ");
Now when the user enters letters, it updates the label and the letters are added, but if you enter enough, they push the rest of the contents of the frame out of view. The label expands the WEST side of my borderlayout so much that everything else get's pushed and then some times cut off the application window.
Is there a good way to use HTML to make it so that it word wraps the text and does not change the panel (what it's contained in) size?
GridLayout c = new GridLayout(rows,0);
westPanel = new JPanel(c);
westPanel.add(guessedPanel);
westPanel.add(usedPanel);
frame.getContentPane().add(westPanel, BorderLayout.WEST);
How it's laid out ^^
For a more general solution for those coming from Google, you can add HTML to Swing components very easily, as long as the content being added starts and ends with the proper HTML tags.
For example, you may insert HTML text into a JLabel such that:
label.setText("<html> Text </html>");
You could color center it and underline the first letter like this:
label.setText("<html><center><u>T</u>ext</center></html>");
Here's a good tutorial on how to use HTML in your Swing components.
--
For your specific solution, you can simply use HTML when adding text to the label. Instead of using used.getText() you should store the text in a String somewhere (that does not enclose the opening and closing HTML tags), and update that String, in order to be able to effectively manage the opening and closing HTML tags. So it could go something like this
String text; // Earlier in the code
...
text += ("<br> " + lUsed);
used.setText("<html>" + text + "</html>")
Among other things, you could attempt setting a preferred or maximum size of the label so that it is not allowed to become to large. Also, you could make the label a text panel or text area of some kind instead, which would automatically support word wrapping, scrolling, and other features that you may want.
Here's a guide on how to use JTextAreas.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With