Ausrichtung in der GUI - Problem

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ich habe mehrere Buttons zusammengefasst zu zwei JPanel. Im linken 3 Buttons und im rechten 3 Buttons. Diese beiden JPanel werden nun zu einem übergeordneten wie abgebildet hinzugefügt (links- bzw. rechtsbündig). Wenn ich jetzt das Fenster verkleinere möchte ich das die Buttons im dem rechten JPanel sich so verhalten wie abgebildet. Welchen Layoutmanager verwende ich da am besten?

Code:
 --------------------------------
|  ----------        ----------  |
| | XX XX XX |      | XX XX XX | |
|  ----------        ----------  |
 --------------------------------
 
 ------------------------
|  ----------   -------  |
| | XX XX XX | | XX XX | |
|  ----------  | XX    | |
|               -------  |
 ------------------------
 
G

Guest

Gast
Ich habe das mal mit dem ExtendedFlowLayout getestet, funktioniert aber leider nicht so richtig. Die Buttons verschwinden zeitweise, da die Höhe der Panels nicht immer rechtzeitig angpasst wird?! So sieht mein Quelltext aus:

Code:
public class Fenstertest extends JFrame {
  public Fenstertest() {
    JButton b1 = new JButton( "Button 1" );
    JButton b2 = new JButton( "Button 2" );
    JButton b3 = new JButton( "Button 3" );
    JButton b4 = new JButton( "Button 4" );
    JButton b5 = new JButton( "Button 5" );
    JButton b6 = new JButton( "Button 6" );

    JPanel p1 = new JPanel();
    JPanel p2 = new JPanel();

    JPanel oben = new JPanel();
    JPanel unten = new JPanel();

    p1.setLayout( new FlowLayout( FlowLayout.LEFT ) );
    p1.add( b1 );
    p1.add( b2 );
    p1.add( b3 );

    p2.setLayout( new FlowLayout( FlowLayout.RIGHT ) );
    p2.add( b4 );
    p2.add( b5 );
    p2.add( b6 );

    oben.setLayout( new GridLayout( 1, 2 ) );
    oben.add( p1 );
    oben.add( p2 );

    unten.setBackground( Color.red );

    setLayout( new BorderLayout() );
    add( oben, BorderLayout.NORTH );
    add( unten, BorderLayout.CENTER );
  }

  public static void main( String[] args ) {
    Fenstertest f = new Fenstertest();
    f.setSize( 600, 200 );
    f.setVisible( true );
  }
 
S

SlaterB

Gast
der Quelltext enthält kein ExtendedFlowLayout, dazu könnte ich aber auch nix sagen,

dass in deinem Code etwas verschwindet liegt an
add( oben, BorderLayout.NORTH );
in einem North-Abschnitt sind sich in der Höhe verändernde Komponenten nie gut aufgehoben, das ist recht unbeweglich
(wenn auch sicher irgendwie zu handhaben)

mit
add(oben, BorderLayout.CENTER);
// add(unten, BorderLayout.CENTER);
läufts erstmal
 
S

SlaterB

Gast
kannst ihn ja in das oben-Panel unten einfügen, natürlich nicht wieder per BorderLayout ;)
niemand sagt dass es einfach ist, aber möglich ist vieles
 
G

Guest

Gast
kannst ihn ja in das oben-Panel unten einfügen, natürlich nicht wieder per BorderLayout
Ich habe jetzt schon ein paar Layouts getestet, aber keins ist so richtig flexibel. Die Reihe der Buttons wird zwar umgebrochen, jedoch macht das untere Panel keinen Platz :/
 
G

Guest

Gast
So ist jetzt mein aktueller Stand:
Code:
public class Fenstertest3 extends JFrame {
  public Fenstertest3() {
    JButton b1 = new JButton( "Button 1" );
    JButton b2 = new JButton( "Button 2" );
    JButton b3 = new JButton( "Button 3" );
    JButton b4 = new JButton( "Button 4" );
    JButton b5 = new JButton( "Button 5" );
    JButton b6 = new JButton( "Button 6" );

    JPanel o1 = new JPanel();
    JPanel o2 = new JPanel();
    JPanel unten = new JPanel();

    o1.setLayout( new FlowLayout( FlowLayout.LEFT ) );
    o1.add( b1 );
    o1.add( b2 );
    o1.add( b3 );
    o1.setBackground( Color.GREEN );

    o2.setLayout( new ExtendedFlowLayout( ExtendedFlowLayout.RIGHT ) );
    o2.add( b4 );
    o2.add( b5 );
    o2.add( b6 );
    //o2.setMinimumSize( new Dimension( 0, 67 ) );
    o2.setBackground( Color.BLUE );

    unten.setBackground( Color.RED );

    this.setLayout( new GridBagLayout() );
    this.getContentPane().add(
        o1,
        new GridBagConstraints( 0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST,
            GridBagConstraints.BOTH, new Insets( 0, 0, 0, 0 ), 0, 0 ) );
    this.getContentPane().add(
        o2,
        new GridBagConstraints( 1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.EAST,
            GridBagConstraints.BOTH, new Insets( 0, 0, 0, 0 ), 0, 0 ) );
    this.getContentPane().add(
        unten,
        new GridBagConstraints( 0, 1, 2, 1, 1.0, 1.0, GridBagConstraints.CENTER,
            GridBagConstraints.BOTH, new Insets( 0, 0, 0, 0 ), 0, 100 ) );
  }

  public static void main( String[] args ) {
    Fenstertest3 f = new Fenstertest3();
    f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    f.pack();
    f.setVisible( true );
  }
}
Code:
public class ExtendedFlowLayout extends FlowLayout {

  public ExtendedFlowLayout() {
    super();
  }

  public ExtendedFlowLayout( int arg0, int arg1, int arg2 ) {
    super( arg0, arg1, arg2 );
  }

  public ExtendedFlowLayout( int arg0 ) {
    super( arg0 );
  }

  /**
   * Returns the preferred dimensions for this layout given the [i]visible[/i]
   * components in the specified target container.
   * 
   * @param target
   *            the container that needs to be laid out
   * @return the preferred dimensions to lay out the subcomponents of the
   *         specified container
   * @see Container
   * @see #minimumLayoutSize
   * @see java.awt.Container#getPreferredSize
   */
  @Override
  public Dimension preferredLayoutSize( Container target ) {
    synchronized ( target.getTreeLock() ) {
      Dimension dim = new Dimension( 0, 0 );
      Dimension t = new Dimension( 0, 0 );
      int nmembers = target.getComponentCount();

      for ( int i = 0; i < nmembers; i++ ) {
        Component m = target.getComponent( i );
        if ( m.isVisible() ) {
          Dimension d = m.getPreferredSize();
          if ( t.width + getHgap() * 2 + d.width >= target.getWidth() ) {
            dim.height = dim.height + d.height + getVgap();
            dim.width = Math.max( dim.width, d.width );
            t.width = dim.width;
            if ( i < nmembers - 1 ) {
              t.width = t.width + getHgap();
            }
          }
          else {
            dim.height = Math.max( dim.height, d.height );
            dim.width = dim.width + d.width;
            if ( i > 0 ) {
              dim.width = dim.width + getHgap();
            }
            t.width = dim.width;
          }
        }
      }
      dim.width = dim.width + getHgap() * 2;
      dim.height = dim.height + getVgap() * 2;

      return dim;
    }
  }

   @Override
  public Dimension minimumLayoutSize( Container target ) {
    return preferredLayoutSize( target );
  }
}

Ich habe das ExtendedFlowLayout versucht anzupassen und bin dabei auf folgendes Problem gestoßen: Der Methode wird beim Aufruf ein Container (target) übergeben, in meinem Fall ein JPanel. Dieser enthält nur leider die Größeninformationen des Panels vor der Änderung der Größe. Somit sind die Informationen veraltet. Ich bräuchte die neue Größe es Panels, nur leider weiß ich nicht wo ich die herbekommen soll :/
 

Marco13

Top Contributor
Das getestete funktionert, abgesehen davon, dass die Buttons nicht
Code:
[ XX XX ]
[ XX    ]
sondern
Code:
[ XX XX ]
[    XX ]
ausgerichtet sind - geht's darum?
 

multiholle

Aktives Mitglied
Bei mir funktioniert der Code nicht richtig. Wenn ich 3 Butten nebeneinander habe (1) und das Fenster verkleinere werden die Button umgebrochen, das Panel verändert sich aber nicht (2). Erst wenn ich anschließend die Größe noch einmal verändere (3) verändert sich die Größe des Panels. Umgekehrt verhält es sich beim Vergrößern des Fensters (4-6), dort wird die Größe zu spät geändert.

Code:
1 [ XX XX XX ] 

2 [ XX XX  ]

3 [ XX XX ]
  [ XX    ]

4 [ XX XX XX ]
  [          ]

6 [ XX XX XX         ]

Das Problem hängt damit zusammen, dass ich die Anordnung der Buttons vor der Größenänderung übergeben bekomme und nicht die neue Anordnung mit Umbruch. Ich weiß nur nicht wie ich das Problem lösen soll.
 

Marco13

Top Contributor
Ahja - wenn ich
Toolkit.getDefaultToolkit().setDynamicLayout(false);
einsetze, kann ich den Fehler nachvollziehen. Kannst ja mal bei dir
Toolkit.getDefaultToolkit().setDynamicLayout(true);
machen, und wenn das nicht hilft... muss man halt mal schauen....
 

multiholle

Aktives Mitglied
Kannst ja mal bei dir
Toolkit.getDefaultToolkit().setDynamicLayout(true);
Das ist auf jeden Fall schon besser, aber noch icht ganz ok. Wenn ich die Aufteilung so habe:
Code:
[ X X X ] [ X X ]  -\  [ X X X ] [ X X X ]
          [ X   ]  _/            [       ]
Und dann Pixel für Pixel vergrößere, wird das Panel zu spät verkleinert.
 

Marco13

Top Contributor
Ja, wenn das noch stört, solltest du vielleicht einen eigenen LayoutManager schreiben. Der macht dann garantiert das, was du willst (sofern du das programmierst, was du willst).
 

Marco13

Top Contributor
Ja, aber das interface LayoutManager hat noch andere Methoden. Die Methode "layoutContainer" bestimmt (in diesem Fall) WO die Buttons liegen, während die preferredLayoutSize nur die PreferredSize des Containers zurückgibt - unabhängig davon, wie die Buttons tatsächlich angeorndet sind.
 

Marco13

Top Contributor
Kann aber auch ein bißchen komplizierter werden:
Die Größe des JPanels bestimmt die Anordnung der Buttons
Die Anordnung der Buttons bestimmt die Größe des JPanels
Da muss man sich was überlegen. Falls du wirklich glaubst, dass der Benutzer Pixelweise die Größe ändert :roll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Größe und Ausrichtung von Komponenten festlegen AWT, Swing, JavaFX & SWT 13
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
X JMenu Menu-Bar ausrichtung ändern im Programm AWT, Swing, JavaFX & SWT 0
C LayoutManager JFrame größe und ausrichtung + Position von Fensterelementen AWT, Swing, JavaFX & SWT 2
M Ausrichtung Vertikaler BOX funktioniert nicht AWT, Swing, JavaFX & SWT 3
J Swing JTable cell-ausrichtung für zahlen mit alternierenden zeilenfarben AWT, Swing, JavaFX & SWT 2
M Ausrichtung von Box'en AWT, Swing, JavaFX & SWT 3
C Swing GridBag-Probleme (Größe und Ausrichtung) AWT, Swing, JavaFX & SWT 3
H Swing Ausrichtung innerhalb der Reiterlasche eines JTabbedPanes AWT, Swing, JavaFX & SWT 9
M JFreeChart Ausrichtung der Balken AWT, Swing, JavaFX & SWT 2
R Swing JLabel Text ausrichtung AWT, Swing, JavaFX & SWT 2
N Swing Ausrichtung von Text in JTable AWT, Swing, JavaFX & SWT 9
W GUI übernimmt ausrichtung nicht AWT, Swing, JavaFX & SWT 5
D SWT SWT TableViewer ausrichtung des Inhaltes nach Datentyp AWT, Swing, JavaFX & SWT 2
G BoxLayout: Ausrichtung der Komponenten AWT, Swing, JavaFX & SWT 2
C Ausrichtung im JPanel AWT, Swing, JavaFX & SWT 19
N ausrichtung Button - hilfe bitte AWT, Swing, JavaFX & SWT 2
A JScrollPane und mittige ausrichtung AWT, Swing, JavaFX & SWT 5
G GridbagLayout Ausrichtung AWT, Swing, JavaFX & SWT 3
M Ausrichtung eines Panels AWT, Swing, JavaFX & SWT 7
G tabbedpane ausrichtung der reiter AWT, Swing, JavaFX & SWT 4
T Ausrichtung eines Jbuttons AWT, Swing, JavaFX & SWT 6
R Ausrichtung am oberen Rand beim Gridbag-Layout AWT, Swing, JavaFX & SWT 2
B FlowLayout ausrichtung | "Wasserzeichen" im JFrame AWT, Swing, JavaFX & SWT 8
S Keine Ausrichtung im JTextPane? AWT, Swing, JavaFX & SWT 3
J Ermittlung der Ausrichtung einer Komponente im BorderLayout AWT, Swing, JavaFX & SWT 3
F Ausrichtung einer Spalte ändern? AWT, Swing, JavaFX & SWT 4
C Ausrichtung von Zelleninhalten bei JTable AWT, Swing, JavaFX & SWT 2
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
olfibits JavaFX Problem mit HTMLEditor AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
N Swing Problem mit loop AWT, Swing, JavaFX & SWT 2
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Swing Splitpane Problem AWT, Swing, JavaFX & SWT 1
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
N JavaFX Stranges Problem mit der Autoscroll-Eigenschaft von Textareas AWT, Swing, JavaFX & SWT 0
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
J JavaFX Intersect Problem mit Shapes AWT, Swing, JavaFX & SWT 10
R JavaFX MediaPlayer AVI-Problem AWT, Swing, JavaFX & SWT 1
M Swing Problem mit ListCellRenderer AWT, Swing, JavaFX & SWT 7
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
F GUI Auflösung ändern - Koordianten und Proportions Problem AWT, Swing, JavaFX & SWT 21
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Problem mit Variablen AWT, Swing, JavaFX & SWT 4
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
M Swing AttributiveCellTableModel addRow() Problem AWT, Swing, JavaFX & SWT 1
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
B Swing Problem mit Bildpfad AWT, Swing, JavaFX & SWT 4
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0

Ähnliche Java Themen

Neue Themen


Oben