Ich schreibe eine Java-GUI, um Papierkram zu imitieren, insbesondere ein Formular, das eine Anzahl von "Zeilen" hat, die nur zur Laufzeit bekannt sind, und die Zeilen sind entweder in zwei geteilt (50%-50%, ein Etikett und ein Eintrag) oder geteilt 25% 75%, (sagen wir eine Zahl und einen ganzen Satz).
Man sollte meinen, dass mit der Aussage (hier nur die wichtigsten Zeilen, vollständigerer Code unten)
GridBagConstraints c = new GridBagConstraints();
...
c.gridx = 0;
c.gridwidth = 2;
...
mainPanel.add(l, c);
gefolgt von:
c.gridx = 2;
c.gridwidth = 4;
...
mainPanel.add(l, c);
würde "feststellen", dass die Platte in x-Richtung in 4 Teile geteilt ist, wodurch ich meine 50-50-Version erhalte, die mir die Freiheit lassen sollte, dies zu tun, um meine 25%-75%-Version zu erhalten:
GridBagConstraints c = new GridBagConstraints();
...
c.gridx = 0;
c.gridwidth = 1;
...
mainPanel.add(l, c);
gefolgt von:
c.gridx = 1;
c.gridwidth = 3;
...
mainPanel.add(l, c);
Aber was ich bekomme, ist, dass alle Zeilen 50-50 geteilt werden. I war Wir haben es geschafft, dass die Linien 50-50 geteilt wurden und andere nicht, was für eine vorläufige Version in Ordnung war.
Habe ich das hier falsch verstanden? In der Seitenleiste "Ähnliche Fragen" sehe ich diesen Beitrag (http://stackoverflow.com/questions/7509781/java-gridbaglayout-automated-construction), in dem das MiG-Layout empfohlen wird, was ich ernsthaft in Betracht ziehen würde.
Der relevante Code folgt, der Rest des Projekts war eine leere Standard-NetBeans-Java-Desktop-Anwendung:
public class GridBagDemoView extends FrameView {
public GridBagDemoView(SingleFrameApplication app) {
super(app);
initComponents();
// Reset the grid position
nextGridY = 0;
addLine_50_50("50", "50");
addLine_50_50("50", "50");
addLine_50_50("50", "50");
addLine_50_50("50", "50");
addLine_25_75("25", "75");
addLine_25_75("25", "75");
addLine_25_75("25", "75");
addLine_25_75("25", "75");
mainPanel.validate();
mainPanel.revalidate();
mainPanel.repaint();
}
private void addLine_50_50(String left, String right) {
GridBagConstraints c = new GridBagConstraints();
// "Universal" settings
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
c.anchor = GridBagConstraints.NORTHWEST;
c.gridheight = 1;
c.weightx = 1;
c.weighty = 1;
// Settings for the labels (LHS of panel)
JTextArea l = new JTextArea();
l.setText(left);
c.gridx = 0;
c.gridy = nextGridY;
c.gridwidth = 2;
c.weightx = 1;
mainPanel.add(l, c);
// Settings for the text (RHS of panel)
JTextArea ta = new JTextArea();
ta.setText(right);
c.gridx = 2;
c.gridy = nextGridY;
c.gridwidth = 2;
c.weightx = 1;
mainPanel.add(ta, c);
// Increase row number of next line
nextGridY++;
}
private void addLine_25_75(String left, String right) {
GridBagConstraints c = new GridBagConstraints();
// "Universal" settings
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
c.anchor = GridBagConstraints.NORTHWEST;
c.gridheight = 1;
c.weighty = 1;
// Settings for the labels (LHS of panel)
JTextArea l = new JTextArea();
l.setText(left);
c.gridx = 0;
c.gridy = nextGridY;
c.gridwidth = 1;
c.weightx = 1;
mainPanel.add(l, c);
// Settings for the lext (RHS of panel)
JTextArea ta = new JTextArea();
ta.setText(right);
c.gridx = 1;
c.gridy = nextGridY;
c.gridwidth = 3;
c.weightx = 1;
mainPanel.add(ta, c);
// Increase row number of next line
nextGridY++;
}
Generated code etc...