hi,
wenn ich auf meinem Panel erstmal ein Raster aus unsichtbaren Labels anbringe kann ich danach mit dem GridBagLayout ganz einfach die Komponenten in diesem Raster einfügen.
Da komme ich mit klar und es scheint auch zu funktionieren.
- kommt mir aber irgendwie unsauber vor ...
Darf man so vorgehen oder handle ich mir damit irgendwelche Nachteile ein die ich als Neuling noch garnicht kenne ?
Freue mich über Hinweise,
gruß,nino
Beispiel :
wenn ich auf meinem Panel erstmal ein Raster aus unsichtbaren Labels anbringe kann ich danach mit dem GridBagLayout ganz einfach die Komponenten in diesem Raster einfügen.
Da komme ich mit klar und es scheint auch zu funktionieren.
- kommt mir aber irgendwie unsauber vor ...
Darf man so vorgehen oder handle ich mir damit irgendwelche Nachteile ein die ich als Neuling noch garnicht kenne ?
Freue mich über Hinweise,
gruß,nino
Beispiel :
Java:
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.Border;
public class GBLWorkaround
{
JFrame mainFrame ;
Container c ;
private GridBagLayout gbl ;
private Border border ;
private int pos ;
private JLabel top ,left;
private JTextField text1,text2,text3 ;
private JButton button , right ;
public GBLWorkaround()
{
// Der Frame
mainFrame = new JFrame("GBLWorkaround");
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setSize(new Dimension(800,800));
gbl = new GridBagLayout();
c = mainFrame.getContentPane();
c.setLayout(gbl);
border = BorderFactory.createLineBorder(Color.black);
// Komponenten bauen
top = new JLabel("This is the TopLabel");
top.setHorizontalAlignment( SwingConstants.CENTER );
top.setBorder(border);
text1 = new JTextField("text 1");
text1.setHorizontalAlignment( SwingConstants.CENTER );
text2 = new JTextField("text 2");
text2.setHorizontalAlignment( SwingConstants.CENTER );
text3 = new JTextField("text 3");
text3.setHorizontalAlignment( SwingConstants.CENTER );
left = new JLabel("Left");
left.setHorizontalAlignment( SwingConstants.CENTER );
left.setBorder(border);
right = new JButton("Right");
// raster setzen
workaround(22,8);
// Komponenten einfügen
addComponent(c, gbl, top, 2, 1, 18, 1 );
addComponent(c, gbl, text1, 2, 3, 5, 1 );
addComponent(c, gbl, text2, 8, 3, 6, 1 );
addComponent(c, gbl, text3, 15, 3, 5, 1 );
addComponent(c, gbl, left, 2, 5, 9, 1 );
addComponent(c, gbl, right, 11, 5, 9, 1 );
// Unten noch fünf Buttons
int pos = 2 ;
for ( int b = 1 ; b < 6 ; b++)
{
button = new JButton(""+b);
addComponent(c, gbl, button ,pos,7, 2, 1 );
pos = pos + 4 ;
}
mainFrame.setVisible(true);
}
/*
* Hier die kritische Methode
* baut ein unsichtbares Raster aus x*y JLabels
*/
public void workaround(int rows,int columns)
{
for ( int x = 0 ; x < rows ; x++)
{
JLabel xRow = new JLabel();
addComponent(c, gbl, xRow, x , 0, 1, 1 );
}
for ( int y = 0 ; y < columns ; y++)
{
JLabel yColumn = new JLabel();
addComponent(c, gbl,yColumn , 0,y+1, 1, 1);
}
}
static void addComponent( Container cont,
GridBagLayout gbl,
Component c,
int x, int y,
int width, int height)
{
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = x; gbc.gridy = y;
gbc.gridwidth = width; gbc.gridheight = height;
gbc.weightx = 1; gbc.weighty = 1;
gbl.setConstraints( c, gbc );
cont.add( c );
}
public static void main(String[] args) {
new GBLWorkaround();
}
}