PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java | Layout Problem, Frage....



maceop
26-10-2002, 18:02
hi,
hab da ein kleines layout problem.
momentan ist mein hauptfenster eingeteilt, durch borderlayout. es werden bis jetzt south,center und north verwendet, wobei south und north schon richtig "plaziert" sind. Die Elemente in south und north haben schon die richtige Platzierung , meine ich damit.

in center müssen nur zwei buttons rein, wenn ich flowlayout nehme (für center) werden die buttons in erträglicher größe dargestellt, doch leider im norden des CENTERs.
wie ist es mir möglich zwei buttons zentriert im Center des Panels anzulegen ohne das sie gleich die hälfte der fensterfläche einnehmen ?
ich habe schon gridlayout durchprobiert, doch die verwendung von "leeren" elementen als füller, ist auf dauer etwas anstrengend und nervig.
borderlayout funktioniert auch nicht, denn wenn ich den einen im westen des centers verwende, nimmt er fast die gesamte linke fläche des fensters ein....

ich hoffe ihr versteht die grundproblematik. hier eine kleine übersicht :

(gesamter bildschirm):

pnorth

pcenter

psouth

wie muss ich also die beiden buttons in pcenter platzieren, dass sie möglichst zentriert im center angezeigt werden ?

SeeksTheMoon
26-10-2002, 18:46
wie ist die Struktur genau?
Am besten ist, Du machst einen Frame mit dem Borderlayout. In den Bereichen (N,S,W,E,C) legst Du jeweils ein Panel ab und das Panel bekommt ein weiteres Layout zugewiesen, dann sollte es klappen

maceop
26-10-2002, 18:59
also:



Button bausgabe = new Button("Ausgabe");
Buton bloeschen = new Button("Loesche");
.....


getContentPane().setLayout(new BorderLayout());

getContentPane().add(pnord,"North");
// in pnord werden diverse elemente korrekt eingefügt
....
getContentPane().add(pcenter,"Center");

getContentPane().add(psouth,"South");
//auch in psouth werden die elemente korrekt eingefügt


ziel ist es bausgabe und bloeschen nun so in pcenter einzufügen, dass die beiden buttons nicht im norden von pcenter liegen. folgende variante sieht meines erachtens nicht so gut aus:



pcenter.setLayout(new FlowLayout());
pcenter.add(bausgabe);
pcenter.add(bloeschen);


hier werden bausgabe und bloeschen in korrekter groeße eingefügt, doch leider liegen beide knöpfe im norden des centers, wenn ich BorderLayout verwende und den einen in "West" und den anderen in "East" packe, nehmen die beiden knöpfe zu große ausmaße an (wenn du verstehst was ich damit meine).

wüsste jmd. ne möglichkeit bei der beide knöpfe in erträglicher größe zentriert im center von pcenter erscheinen ?

tia
maceop

anda_skoa
26-10-2002, 20:59
bringt
pcenter.pack()
nach dem Einfügen der Buttons was?
Eventuell mit contentPane().pack() kombiniert?

Ciao,
_

maceop
27-10-2002, 13:18
hi,
also hab pcenter als JPanel "deklariert", wenn ich nach pcenter.add(bausgabe).....pcenter.pack() schreibe, kommt "can not resolve symbol", wenn ich pcenter als Panel nehme, kommt auch "Can not resolve symbol".

verwende ich pcenter.contentPane().pack kommt.....dreimal darfst du raten (;) ) : Can not resolve symbol


wäre wirklich dankbar für weitere vorschläge, da die buttons noch ziemlich scheisse aussehen ...

tia
maceop

anda_skoa
27-10-2002, 15:03
Hmm, mein Fehler.
GUI Programmeriung hab ich nur mal kurz versucht und ist schon lange her.
pack() gibt es nur in Subklassen von java.awt.Window
Es müßte also reichen, es am JFrame oder JDialog aufzurufen, in dem das eingebettet ist.

Und mein Compiler besteht darauf, bei SWING Componenten add durch getContentPane().add zu ersetzen.

Steht auch so in der Doku.

Ciao,
_

maceop
27-10-2002, 16:00
das fenster sieht nach aufruf von pack wirklich anders aus, nur ist das problem mit den beiden knöpfen nicht beseitigt.

vielleicht muss ich einfach das gesamte fenster anders strukturieren, und vielleicht auf ein komplexeren layout-manager zurückgreifen..

peschmae
28-10-2002, 10:58
ohne das ganze durchzulesen (sooo viel zeit hab ich auch net ;-))


wie ist es mir möglich zwei buttons zentriert im Center des Panels anzulegen ohne das sie gleich die hälfte der fensterfläche einnehmen ?

Mein Vorschlag: in Center eine Box.getVerticalBox() als Layoutmanager, dann oben unten einen glue oder wie die auch immer heissen (die teils die sich automatisch der Grösse anpassen); dann zwischen den beiden glues eine horizontalBox und da die beiden Rein, also:
Center:
----------------------------------
VerticalGlue
----------------------------------
¦gGlue¦Button¦strut¦Button¦hGlue¦
----------------------------------
VerticalGlue

Strut: Belegt gerne eine bestimte angegebene grösse
Glue: Sogross wie möglich

Wird ein bisschen grässlich geschachtelt, evtl. wär ein gridbaglayout oder so einfacher

MfG Peschmä