Re: resizing labelled text field
On 10/28/2010 1:15 PM, Fred wrote:
How do I get the label to be displayed its preferred size, and the
text field to take up whatever other space is available?
I agree with Knute I think it's probably that the higher level Frame
doesn't know that it needs to change size. I wrote a little example
program and called pack() on the frame each time I changed the text
label's size. It seemed to work.
Uncomment the "// frame.pack()" below to see this. You should first run
this as-is, because I might be getting a little different behavior than
you: I saw my label increase size increase fine, it was the text field
that got pushed out of view.
package test;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
/**
*
* @author Brenden
*/
public class BorderLayoutTest2
{
public static void main( String[] args )
{
SwingUtilities.invokeLater( new Runnable()
{
public void run()
{
createAndShowGui();
}
} );
}
private static void createAndShowGui()
{
final JFrame frame = new JFrame("Test");
final JLabel label = new JLabel("name");
JTextField field = new JTextField();
field.setColumns( 10 ); // for initial sizing of the panel
JPanel inside = new JPanel( new BorderLayout() );
inside.add( label, BorderLayout.WEST );
inside.add( field, BorderLayout.CENTER );
JButton increase = new JButton( "Increase Label Text");
inside.add( increase, BorderLayout.SOUTH );
increase.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e )
{
label.setText( label.getText() + "a little longer");
// frame.pack();
}
} );
frame.add( inside );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
}