Re: How to prevent a long
To: comp.lang.java.gui
On Apr 4, 2:17 pm, martin...@gmail.com wrote:
Hi All,
I want to have a long JLabel, but I dont want my entire dialog to be
sized based on this long JLabel -- I want the JLabel to wrap, & I want
the dialog size to be set by other controls.
So I want something like this if the control (for ex. a JTextField) is
long:
A really really really really really long JLabel
<--------JTextField-------------------------------->
And something like this if the JTextField is short:
A really really really
really really long
JLabel
<---JTextField------->
I found out that I need to use <html> tags to get the JLabel to wrap.
So that was one hurdle. Now, I almost got what I want with the
following code:
[CODE]
import javax.swing.*;
import java.awt.*;
public class x
{
private static void createAndShowGUI()
{
JFrame frame = new JFrame("test");
frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
// Change content pane to JPanel set to BoxLayout
JPanel framePanel = new JPanel();
framePanel.setLayout(new BoxLayout(framePanel, BoxLayout.Y_AXIS));
frame.setContentPane(framePanel);
JLabel label = new JLabel("<html>Here is a label. It can get to be
very very very long aaaaaaa bbbbbbbbbbbbbbbb ccc dd eeeeeeee ffffff
gggggggggg hhhh.</html>");
frame.add(label);
// CHANGE JTEXTFIELD SIZE TO SEE PROBLEM
//frame.add(new JTextField(80));
frame.add(new JTextField(10));
// THIS LINE ALMOST DOES WHAT I WANT
label.setPreferredSize(new Dimension(0, 100));
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(
new Runnable() {
public void run() { createAndShowGUI(); }
});
}}
[/CODE]
With this, I can get the effect I want. To see it, I change the size
of the JTextField. JTextField(10) -- it wraps. JTextField(80) -- it
doesnt wrap. Thats good.
I got it to work like this with this line:
label.setPreferredSize(new Dimension(0, 100));
The problem is the height. For the width, I can use '0' and it will
size correctly. I cant do the same with height. If I set it to '0' (or
-1, 1, 2, etc) then thats the height it uses. With '100', its ok when
the text field is small, but when its big, theres too much vertical
space around the label.
I dont know how to say:
'set a preferred width, but leave the preferred height alone'
Or
'set preferred width to 0 (and you'll later re-adjust that),
and set preferred height to the height after you've wrapped it'
I had originally used <br> tags to force the wrapping myself, but
later found out my gui looks bad when Windows is set to 120 DPI. So I
basically want to avoid all hard coded sizes, or line breaks.
Thanks
It depends on the layout manager being used.
You COULD set maximum size on the label though.
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24