Passendes Layout für JDialog

22/01/2015 - 20:53 von Christian H. Kuhn | Report spam
Hallo Gemeinde,

Ich werde gerade waaaaaaahnsinnig.

Aufgabe: JDialog. Im Prinzip: 3 Zeilen. In den ersten beiden: Zunàchst
ein JLabel mit bekanntem Text, dann eines, das am Anfang " " enthàlt und
spàter mal einen Filenamen, am Schluss ein JButton, der den JFileChooser
öffnen soll. Zeile 3: Cancel- und Ok-Button. Die beiden ersten JLabel in
jeder Zeile sind unterschiedlich lang. Die beiden Labels mit Filenamen
sollen linksbündig untereinanderstehen und eine feste Lànge haben. Die
beiden JButton für die Filechooser sollen untereinanderstehen.

Ansatz 1: BoxLayout. Außen PAGE_AXIS, die Reihen je eigenes JPanel mit
BoxLayout und LINE_AXIS. Etwas Glue dazu. Ich bekomme das oben
beschriebene Alignment nicht hin.

Ansatz 2: GridBagLayout. Die ersten Labels je eine Zelle, die
Filename-Labels 5 Zellen, die Buttons in den ersten beiden Zeilen je
eine Zelle. Cancel-Button in Zelle 4, Ok-Button in Zelle 6. Klappt.
Theoretisch. Leider haben die Zellen 1-5 praktisch keine width, ihre
Gesamtweite ist damit auch fast 0, dadurch ist das ganze erstens
hàßlich, und zweitens überlappen die Buttons in der letzten Reihe.

Ich habe die Dokumentation zu den verwendeten und ausprobierten Klassen
gelesen und die Oracle-HowTos. Ich habe keine Möglichkeit gefunden,
einem JLabel eine width zuzuweisen, oder einer Zelle eines
GridBagLayouts. Kann mir jemand den RTM-Pointer setzen?

mfg+TIA
Christian
 

Lesen sie die antworten

#1 Patrick Roemer
23/01/2015 - 12:03 | Warnen spam
Responding to Christian H. Kuhn:
Aufgabe: JDialog. Im Prinzip: 3 Zeilen. In den ersten beiden: Zunàchst
ein JLabel mit bekanntem Text, dann eines, das am Anfang " " enthàlt und
spàter mal einen Filenamen, am Schluss ein JButton, der den JFileChooser
öffnen soll. Zeile 3: Cancel- und Ok-Button. Die beiden ersten JLabel in
jeder Zeile sind unterschiedlich lang. Die beiden Labels mit Filenamen
sollen linksbündig untereinanderstehen und eine feste Lànge haben. Die
beiden JButton für die Filechooser sollen untereinanderstehen.



Ich wuerde FormLayout empfehlen:
http://www.jgoodies.com/freeware/libraries/forms/

Wenn ich Dich richtig verstanden habe:

FormLayout layout = new FormLayout(
"l:p, $rg, p, $rg, p, f:[50dlu,p]:g, $rg, p",
"p, $rg, p, $ug, p");
layout.setRowGroups(new int[][] { { 1, 3 } });
layout.setColumnGroups(new int[][] { { 3, 5 } });
PanelBuilder builder = new PanelBuilder(layout);
builder.border(Borders.DIALOG);
CellConstraints cc = new CellConstraints();
builder.addLabel("File A", cc.xy(1, 1));
builder.add(new JLabel(" "), cc.xyw(3, 1, 4));
builder.add(new JButton("Browse"), cc.xy(8, 1));
builder.addLabel("File BBB", cc.xy(1, 3));
builder.add(new JLabel(" "), cc.xyw(3, 3, 4));
builder.add(new JButton("Browse"), cc.xy(8, 3));
builder.add(new JButton("OK"), cc.xy(3, 5));
builder.add(new JButton("Cancel"), cc.xy(5, 5));
return builder.getPanel();

Viele Gruesse,
Patrick

Ähnliche fragen