Ich erstelle den obersten Teil (die drei Label und Felder als JPanel)
(siehe buildInOutPanel() weiter unten)
In der übergeordneten Routine (buildTab()) frage ich dann wie breit das JPanel ist und möchte den Wert verwenden, um das Textfeld und das buttonPanel genau gleich breit darzustellen.
(Je nach Sprache der Texte wird das unterschiedlich breit)
Das buttonPanel wird allerdings zu breit - so rein heuristisch habe ich herausgefunden, dass ich 28 abziehen muss, damit es stimmt - was ist da los? Warum liefert mir die Frage nach der Breite des JPanels einen zu grossen Wert?
Das komplette Sourcefile habe ich angehängt.
(siehe buildInOutPanel() weiter unten)
In der übergeordneten Routine (buildTab()) frage ich dann wie breit das JPanel ist und möchte den Wert verwenden, um das Textfeld und das buttonPanel genau gleich breit darzustellen.
(Je nach Sprache der Texte wird das unterschiedlich breit)
Das buttonPanel wird allerdings zu breit - so rein heuristisch habe ich herausgefunden, dass ich 28 abziehen muss, damit es stimmt - was ist da los? Warum liefert mir die Frage nach der Breite des JPanels einen zu grossen Wert?
Das komplette Sourcefile habe ich angehängt.
Java:
private JPanel buildInOutPanel() {
final int inOutFieldWidth = 100;
JTextField aufLastFeld = new JTextField();
JTextField deckenLastFeld = new JTextField();
JTextField linienLastFeld = new JTextField();
final int height = aufLastFeld.getSize().height;
aufLastFeld.setSize(inOutFieldWidth, height);
deckenLastFeld.setSize(inOutFieldWidth, height);
linienLastFeld.setSize(inOutFieldWidth, height);
String fmt = "max(pref;" + inOutFieldWidth + ")";
linienLastFeld.setText(fmt);
FormLayout formLayout = new FormLayout(
"pref" // Spalte 1
+ ", 3dlu" // Spalte 2
+ ", " + fmt // Spalte 3
,
"pref" // Zeile 1
+ ", 3dlu" // Zeile 2
+ ", pref" // Zeile 3
+ ", 3dlu" // Zeile 4
+ ", pref" // Zeile 5
+ ", 3dlu" // Zeile 6
+ ", pref" // Zeile 7
);
PanelBuilder builder;
if (debug) {
builder = new DefaultFormBuilder(formLayout, new FormDebugPanel());
} else {
builder = new DefaultFormBuilder(formLayout, new JPanel());
}
builder.setDefaultDialogBorder();
CellConstraints cc = new CellConstraints();
builder.addLabel("Auflast nd (kN/m)", cc.xy (1, 1));
builder.add(aufLastFeld, cc.xyw(3, 1, 1));
builder.addLabel("Deckenlast vd (kN/m)", cc.xy (1, 3));
builder.add(deckenLastFeld, cc.xyw(3, 3, 1));
builder.addSeparator("", cc.xy (3, 5));
builder.addLabel("Linienlast vd (kN/m)", cc.xy (1, 7));
builder.add(linienLastFeld, cc.xy (3, 7));
return builder.getPanel();
}
Java:
private JComponent buildButtonPanel(int width) {
JButton mButtonOK = new JButton();
JButton mButtonCancel = new JButton();
Dimension buttonDim = new Dimension(100, 27);
mButtonOK.setPreferredSize(buttonDim);
// einige nicht relevante Zeilen entfernt - Actionlistener etc.
mButtonCancel.setPreferredSize(buttonDim);
// einige nicht relevante Zeilen entfernt
DefaultFormBuilder builder;
// Warum muss hier -28 gerechnet werden?
int space = Math.max(10, width - 28 - 2 * buttonDim.width);
String fmt = space + "";
FormLayout layout = new FormLayout(
"pref, " + fmt + ", pref",
"pref"
);
if (debug) {
builder = new DefaultFormBuilder(layout, new FormDebugPanel());
} else {
builder = new DefaultFormBuilder(layout, new JPanel());
}
builder.setDefaultDialogBorder();
CellConstraints cc = new CellConstraints();
builder.add(mButtonOK, cc.xy (1, 1));
builder.add(mButtonCancel, cc.xy (3, 1));
return builder.getPanel();
}
Java:
private JComponent buildTab(String title, JTextArea area) {
JComponent inoutPanel = buildInOutPanel();
final int width = inoutPanel.getMinimumSize().width;
final String columnSpec = "max(" + 10 + ";pref)";
FormLayout layout = new FormLayout(
columnSpec,
"pref, 9dlu, pref, 3dlu, fill:default, 9dlu, pref, 9dlu, pref"
);
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
CellConstraints cc = new CellConstraints();
builder.add(inoutPanel, cc.xy(1, 1));
builder.add(area, cc.xy(1, 3));
JComponent buttonPanel = buildButtonPanel(width);
builder.add(buttonPanel, cc.xy(1, 9));
JComponent panel = builder.getPanel();
return panel;
}
Anhänge
Zuletzt bearbeitet von einem Moderator: