1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Layout, Buttons und verschiedene Panel

Dieses Thema im Forum "Swing, Java2D/3D, SWT, JFace" wurde erstellt von Yoshi2k, 9. Juni 2008.

  1. Yoshi2k

    Yoshi2k Grünschnabel

    Hallo zusammen,
    ich habe ein Problem in Java Swing beim Ändern meines Layouts beim Klick auf einen Button, der auf einem eigenen Panel liegt.
    Zum Aufbau meines Programms:
    Ich habe einen Frame, auf dem links vier Buttons sind, die das Layout rechts ändern. Dies geschieht in der Datei "MainView.java". Ich verwende dazu folgenden Code (eine Switch Anweisung)
    Code (Text):
    1.  
    2.     public void setMainViewLayout(MainViewLayout layout)
    3.     {
    4.         switch(layout)
    5.         {
    6.             case MEDIA_LIST_AND_ENTRY_PANEL:
    7.             {
    8.                 if(this.layout.equals(MainViewLayout.MEDIA_LIST_AND_ENTRY_PANEL))
    9.                     break;
    10.                
    11.                 mainPanel.removeAll();
    12.                 javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
    13.                 mainPanel.setLayout(mainPanelLayout);
    14.                 mainPanelLayout.setHorizontalGroup(
    15.                     mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    16.                     .addComponent(ShowMediaScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 802, Short.MAX_VALUE)
    17.                     .addComponent(MediaListScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 802, Short.MAX_VALUE)
    18.                 );
    19.                
    20.                  mainPanelLayout.setVerticalGroup(
    21.             mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    22.             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
    23.                 .addComponent(MediaListScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 211, Short.MAX_VALUE)
    24.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
    25.                 .addComponent(ShowMediaScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 374, javax.swing.GroupLayout.PREFERRED_SIZE))
    26.         );
    27.                  /*
    28.                 mainPanelLayout.setVerticalGroup(
    29.                     mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    30.                     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
    31.                         .addComponent(MediaListScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE)
    32.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
    33.                         .addComponent(ShowMediaScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 260, javax.swing.GroupLayout.PREFERRED_SIZE))
    34.                 );
    35.                
    36.                   * */
    37.                  break;
    38.             }
    39.             case NEW_MOVIE_ENTRY_PANEL:
    40.             {
    41.                 if(this.layout.equals(MainViewLayout.NEW_MOVIE_ENTRY_PANEL))
    42.                     break;
    43.                
    44.                 mainPanel.removeAll();
    45.                 NewEntryPanel newEntryPanel = new NewEntryPanel();
    46.                 javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
    47.                 mainPanel.setLayout(mainPanelLayout);
    48.                 mainPanelLayout.setHorizontalGroup(
    49.                     mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    50.                     .addComponent(newEntryPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 802, Short.MAX_VALUE)
    51.                 );
    52.                 mainPanelLayout.setVerticalGroup(
    53.                     mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    54.                     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
    55.                         .addComponent(newEntryPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE))
    56.                 );
    57.                 break;
    58.             }            
    59.             case NEW_ENTRY_TYPE_CHOOSER_PANEL:
    60.             {
    61.                 if(this.layout.equals(MainViewLayout.NEW_ENTRY_TYPE_CHOOSER_PANEL))
    62.                     break;
    63.                
    64.                 mainPanel.removeAll();
    65.                 NewEntryTypeChooserPanel newEntryTypeChooserPanel = new NewEntryTypeChooserPanel();
    66.                 javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
    67.                 mainPanel.setLayout(mainPanelLayout);
    68.                 mainPanelLayout.setHorizontalGroup(
    69.                     mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    70.                     .addComponent(newEntryTypeChooserPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 802, Short.MAX_VALUE)
    71.                 );
    72.                 mainPanelLayout.setVerticalGroup(
    73.                     mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    74.                     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
    75.                         .addComponent(newEntryTypeChooserPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE))
    76.                 );
    77.                 break;
    78.             }
    79. usw.
    80.  
    Je nachdem welcher Button links geklickt wird, bekommt die Funktion "setMainViewLayout" einen anderen Wert übergeben und ändert das Layout.

    Nun zu meinem Problem:
    Ich möchte nun dieses Layout mit Hilfe eines Buttons ändern, welcher sich auf einem separaten Panel befindet, nämlich dem, welches in "NEW_ENTRY_TYPE_CHOOSER_PANEL" aufgerufen wird.

    Meine Frage ist also: Wie greife ich von diesem Panel auf diese Funktion zu, um eben das Layout des gesamten Frames zu ändern.

    Ich hoffe ich konnte mich klar ausdrücken ;)

    Vielen Dank schon einmal für die Hilfe!!

    Viele Grüße
    Stefan
  2. jannaef

    jannaef Grünschnabel

    Hallo

    Ich würde das ganze im MVC-Prinzip implemenieren, also:

    Ein Model, und ein Observer schreiben, deine beiden Panels beim Model als Observer hinzufügen, und wenn auf ein Button geklickt wird deine setMainViewLayout Methode ausführen.

Diese Seite empfehlen