Jeans: Content austauschen durch ActionListener

Hi

Ich habe für jeden Button in der Main Klasse eine eigene ActionListener Klasse (eg. class button1Listener) erstellt. Wird einer dieser Button gedrückt soll der Content des Frames ausgetauscht werden.

Ok, mit remove den Content des Frame's löschen funktioniert schon mal. Jetzt wollte ich mit add den neuen content einfügen.

Ich verstehe allerdings nicht was in add(???) rein muss, bei Verwendung des unteren Beispiels. Der Code des Beispiels soll ausgelagert bleiben u. nicht in die class button1Listener wg. Übersicht. Da komm ich echt nich weiter

Hier der Code

import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.*;button1Listener

public class button1Listener implements ActionListener
{
    private JPanel oldContent, oldPanel;

public analysisListener(JPanel c, JPanel p)
    {
        newFrame = f;
        oldFrame = old;
        oldContent = c;
        oldPanel = p;  //nur für event. change des Panels
    }

public void actionPerformed (ActionEvent e)
    {
        oldContent.removeAll();
        oldContent.add( ??? );
    }
}

Beispiel-Application:

import javax.swing.JFrame;

public class ListTest
{
   public static void main( String args[] )
   {
      ListFrame listFrame = new ListFrame(); // create ListFrame
      listFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
      listFrame.setSize( 350, 150 ); // set frame size
      listFrame.setVisible( true ); // display frame
   } // end main
}

import java.awt.FlowLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.ListSelectionModel;

public class ListFrame extends JFrame
{
   private JList colorJList; // list to display colors
   private final String colorNames[] = { "Black", "Blue", "Cyan",
      "Dark Gray", "Gray", "Green", "Light Gray", "Magenta",
      "Orange", "Pink", "Red", "White", "Yellow" };
   private final Color colors[] = { Color.BLACK, Color.BLUE, Color.CYAN,
      Color.DARK_GRAY, Color.GRAY, Color.GREEN, Color.LIGHT_GRAY,
      Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.WHITE,
      Color.YELLOW };

// ListFrame constructor add JScrollPane containing JList to JFrame
   public ListFrame()
   {
      super( "List Test" );
      getContentPane().setLayout( new FlowLayout() ); // set frame layout

colorJList = new JList( colorNames ); // create with colorNames
      colorJList.setVisibleRowCount( 5 ); // display five rows at once

// do not allow multiple selections
      colorJList.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );

// add a JScrollPane containing JList to frame
      getContentPane().add( new JScrollPane( colorJList ) );

colorJList.addListSelectionListener(
         new ListSelectionListener() // anonymous inner class
         {
            // handle list selection events
            public void valueChanged( ListSelectionEvent event )
            {
               getContentPane().setBackground(
                  colors[ colorJList.getSelectedIndex() ] );
            } // end method valueChanged
         } // end anonymous inner class
      ); // end call to addListSelectionListener
   } // end ListFrame constructor
}

Danke schon mal.

  1. Hallo Jeans,

    Ich verstehe allerdings nicht was in add(???) rein muss, bei Verwendung des unteren Beispiels.

    Mit add(...) kannst Du wieder Komponenten hinzufügen, was genau verstehst Du daran nicht? Zustätzlich kannst Du da noch Costrains u.ä. angeben. Es kommt dann aber auf den LayoutManager an, wie sich diese Angaben auswirken.
    Anschließend solltest Du noch revalidate() auf die Komponente aufrufen, deren Inhalt Du geändert hast, damit das Layout neu berechnet wird.

    So ganz verstanden, was Du tun willst, habe ich allerdings noch nicht.
    Für was ist oldPanel gut? Was soll "change des panels" heißen?
    Dein Kommentierungsstil ist sowieso nicht gut, die meisten Kommentare sind überflüssig:
    // anonymous inner class
    Jeder, der Java kann, sieht das.
    // handle list selection events
    Warum die Klasse wohl ListSelectionListener heißt?
    Auch diese end-of-...-Kommentare kannst Du Dir eigentlich schenken. Sie machen den Code nur unübersichtlicher und wenn man sie wirklich mal braucht um das zu erkennen, ist der Code wahrscheinlich einfach zu kompliziert.
    Beschreibe lieber die Aufgabe Methoden und Klassen mit einem Kopfkommentar und erleutere die Bedeutung von Parametern und Eigenschaften.

    Grüße

    Daniel

    1. Ok, mit remove habe ich es jetzt geschaftt den Content zu entfernen. Soweit is mir das klar das ich damit Komponenten aufrufen kann. Kann ich die neu aufzurufenden Komponenten in einer Klasse auslager aus Gründen der Übersicht!?

      Wenn ja, wie muss so eine Klasse sturkturiert (Syntax) sein und wie werden die Komponenten wie z.B. Panels dann aufgerufen (Syntax)!?

      Hab das wohl zu kompliziert ausgedrückt, sorry...

      Hallo Jeans,

      Ich verstehe allerdings nicht was in add(???) rein muss, bei Verwendung des unteren Beispiels.
      Mit add(...) kannst Du wieder Komponenten hinzufügen, was genau verstehst Du daran nicht? Zustätzlich kannst Du da noch Costrains u.ä. angeben. Es kommt dann aber auf den LayoutManager an, wie sich diese Angaben auswirken.
      Anschließend solltest Du noch revalidate() auf die Komponente aufrufen, deren Inhalt Du geändert hast, damit das Layout neu berechnet wird.

      So ganz verstanden, was Du tun willst, habe ich allerdings noch nicht.
      Für was ist oldPanel gut? Was soll "change des panels" heißen?
      Dein Kommentierungsstil ist sowieso nicht gut, die meisten Kommentare sind überflüssig:
      // anonymous inner class
      Jeder, der Java kann, sieht das.
      // handle list selection events
      Warum die Klasse wohl ListSelectionListener heißt?
      Auch diese end-of-...-Kommentare kannst Du Dir eigentlich schenken. Sie machen den Code nur unübersichtlicher und wenn man sie wirklich mal braucht um das zu erkennen, ist der Code wahrscheinlich einfach zu kompliziert.
      Beschreibe lieber die Aufgabe Methoden und Klassen mit einem Kopfkommentar und erleutere die Bedeutung von Parametern und Eigenschaften.

      Grüße

      Daniel

      1. Hallo Jeans,

        Was meinst Du mit "aufrufen"? Aufrufen kann man Methoden, bei GUI-Komponenten ist mir nicht klar, was damit gemeint ist.

        Ich denke, Du willst neue Komponenten hinzufügen? Also z.B. sowas machen:
        oldPanel.removeAll();
        oldPanel.add(new JButton("foo"));
        //...
        oldPanel.revalidate();

        Grüße

        Daniel

        1. Hi,

          ja meinte das adden der Komponenten. Da die Syntax der hinzuzufügenden Komponenten sehr umfangreich ist wollte ich diese in eine eigne Klasse auslagern. Wie kann so eine Klasse aussehen (sprich Aufbau der Klasse) und wie können diese Komponenten dann hinzugefügt oldPanel.add(???) werden, da ja ausgelagert!?

          Oder anders formuliert ich hab 2 Klassen, eine enthält die Komponenten - wo ich jedoch nich weiss wie da die Syntax ausehen muss - und die andere enthält
          oldPanel.removeAll();
          oldPanel.add(???);

          Gruss und Danke
          Jens

          Hallo Jeans,

          Was meinst Du mit "aufrufen"? Aufrufen kann man Methoden, bei GUI-Komponenten ist mir nicht klar, was damit gemeint ist.

          Ich denke, Du willst neue Komponenten hinzufügen? Also z.B. sowas machen:
          oldPanel.removeAll();
          oldPanel.add(new JButton("foo"));
          //...
          oldPanel.revalidate();

          Grüße

          Daniel