Problem mit Layout-Manager

Alex_winf01

Top Contributor
Hallo liebe Forengemeinde. Ich bastel mir folgenden Dialog zusammen:

Java:
JPanel hilfspanel = new JPanel(new FlowLayout());
JPanel panel = new JPanel(new GridLayout(1,0));
JPanel hilfe = new JPanel(new GridLayout(2,0));
hilfspanel.add(ok); // ok ist der "OK"-Button
hilfspanel.add(dru); // dru ist der "Drucken"-Button
hilfe.add(infotext); // infotext ist der Text für den Anwender (ist flexibel lang; mal 1 Fehlermeldung, mal 15 Fehlermeldung, mal nur 5 Fehlermeldungen
hilfe.add(hilfspanel);
panel.add(hilfe);
JScrollPane scrollPane = new JScrollPane(panel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPane.Constants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
diag.setLayout(new BorderLayout());
diag.setTitle("Titel");
diag.setVisible(true);
diag.add(scrollPane);
diag.setDefaultCloseOperation(JDialog.DO_NOTING_ONCLOSE);
diag.pack(); // JDialog so flexibel, dass alle Komponenten rein
diag.setAlwaysOnTop(true); // JDialog immer in den Vordergurnd
diag.setLocationRelativeTo(null); // JDialog in die Mitte des Bildschirm

Nun habe ich 2 Fragen:

1) wie kann ich den JFrame komplett sperren (also auch kein Klick auf andere Schaltflächen möglich)?
2) Alle Komponenten werden "geklatscht" oben im JDialog angezeigt, im Süden ist noch so viel Platz (den ich nicht brauche, da dort nichts angezeigt wird). Wie kann ich das beheben?

Vielen Dank schon mal im voraus.
 
JFrame.setEnabeld();

JFrame.pack();

Ich sehe, dass du PAck schon benutzt. Aber dann ist eine Komponente da, die den Platz haben möchte, selbst wenn du sie nicht siehst. Zum Beispiel ein Leeres JLabel.
 
@ Camino

Java:
diag.setVisible(true);
am Ende aufrufen hat keine Besserung ergeben. Der viele Platz kommt erst nach den Schaltflächen und nach den Schaltflächen füge ich keine Componenten mehr ein (auch kein leeres Label).
 
Dein Code ist leider nicht vollständig und somit nicht sehr aussagekräftig. So kann man leider nur spekulieren. Ich vermute mal, dass diag dein Dialog sein soll, der aus einem Frame heraus aufgerufen wird. Es ist aus dem Code nicht ersichtlich, wo der Dialog erzeugt wird. Am besten wäre, wenn du 2 Klassen anlegst: einmal der der JFrame und einmal der Dialog. Dann wird das alles vielleicht übersichtlicher.

Zu 1) Wenn du aus einem JFrame einen Dialog aufrufst und setModal(true) setzt, dann reagiert der Frame solange nicht mehr, bis der Dialog geschlossen wurde. Meinst du das?
 
Zuletzt bearbeitet von einem Moderator:
Mach mal ein komplettes KSKB...

Außerdem kann man für solche Sachen auch eine JOptionPane benutzen. Da kannst deine Button unten umbennen, und ein eigenes Panel übergeben.
 
@ all

danke für die Anregungen. Nun weiss ich woran es liegt: Am Text selber. Der JDialog wird immer so hoch gemacht, wie breit. Wenn ich natürlich in einem Array-Eintrag (infotext) einen ganz langen Text habe und in einem anderen einen kurzen, dann richtet sich komischerweise die Höhe nach der Breite. D. h. ich muss für den JDialog in der Höhe flexibel bleiben, die Breite soll aber fix sein. Kann ich irgendwie nur die Breite fix einstellen und nicht die Höhe?
 
Steck doch den infotext in eine JTextArea mit ScrollPane. Dann bleibt die Grösse des Dialogs erhalten und wenn der Text länger wird, dann kannst/musst du nach unten scrollen. Ist vielleicht eine elegantere Lösung, als wie wenn sich die Grösse des Dialogs ständig der Länge des infotextes anpasst.
 

Zurück
Oben