Re: Swing: align JLabel, JTextField inside TitledBorder
On 03/10/2011 09:58 AM, albert kao wrote:
How to align JLabel& JTextField which are outside a TitledBorder with
the JLabel& JTextField which are inside a TitledBorder?
My simplified Swing test program is as follows.
I use GridBagLayout for more powerful control.
i.e. how to align lastNameLabel with cityLabel& streetNumberLabel,
lastNameText with cityText& streetNumberText?
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
public class test extends JPanel {
JLabel l1,l2;
JTextField tf1,tf2;
public test() {
super(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridy = 0; c.insets = new Insets(2,2,2,2);
c.fill = GridBagConstraints.HORIZONTAL;
add(new JLabel("Label 000"),c);
add(new JTextField("Field 0"),c);
++c.gridy;
c.insets = new Insets(20,2,2,2);
l1 = new JLabel("Label 1");
add(l1,c);
tf1 = new JTextField("Field 00001");
add(tf1,c);
++c.gridy;
c.insets = new Insets(2,2,2,2);
l2 = new JLabel("Label 2");
add(l2,c);
tf2 = new JTextField("Field 2");
add(tf2,c);
setBorder(new MyTitledBorder(
BorderFactory.createLineBorder(Color.BLACK,2),"Title"));
}
class MyTitledBorder extends TitledBorder {
Rectangle rv;
public MyTitledBorder(Border border, String title) {
super(border,title);
}
public void paintBorder(Component c, Graphics g, int x, int y,
int width, int height) {
rv = l1.getBounds();
rv.add(tf1.getBounds());
rv.add(l2.getBounds());
rv.add(tf2.getBounds());
rv.grow(10,10);
super.paintBorder(c,g,(int)rv.getX(),(int)rv.getY()-10,
(int)rv.getWidth(),(int)rv.getHeight()+10);
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test t = new test();
f.add(t,BorderLayout.CENTER);
f.setSize(320,240);
f.setVisible(true);
}
});
}
}
--
Knute Johnson
s/knute/nospam/