GUI Aktualisierung aus/und eventListener

butti

Neues Mitglied
Hallo zusammen,

Als erstes möchte ich anmerken, dass ich noch ein totaler Anfänger bin.

Um mich besser mit der Materie vertraut zu machen, habe ich trotzdem mit einem kleinen Programm begonnen(Hier in gekürzter Form).

Kurz beschrieben habe ich das Problem, dass ich aus einem eventListener zb die Farbe eines Buttons ändern kann, oder aber den text in der jtextarea1 setzen kann......

Java:
class jbutton1Listener implements ActionListener {
    	public void actionPerformed(ActionEvent event) {
    		
                setJtextarea1("Item rechner01 clicked: ");
    		    jbutton1.setBackground(Color.blue);

    	}
    }


aus einem anderen eventListener funktioniert dies aber nicht ?!

Java:
class StartPingListener implements ActionListener {
    	public void actionPerformed(ActionEvent event) {
    		
                setJtextarea1("startMyPing clicked: ");
    		    jbutton1.setBackground(Color.blue);
  	      	
    		//startMyPing();	
    	}
    }

Ich bin mir bewusst, dass dort wahrscheinlich auch sonst so einige Schnitzer drin sind und für alle Kommentare offen.

Programm:
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.*;
import java.net.InetAddress;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JButton;

import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import javax.swing.JScrollPane;


public class PanelB1 extends JPanel {
    
	private JFrame f;
	private PanelBuilder builder;
	JTextArea jtextarea1;

	JButton jbutton1;
	JButton jbutton2;
	JButton jbutton3;
	
	Thread t1;

	
	public PanelB1() {
        super(new BorderLayout());
      	
        jbutton1 = new JButton("rechner01");
        jbutton1.addActionListener(new jbutton1Listener());
        
        jbutton2 = new JButton("rechner08");
        jbutton2.addActionListener(new jbutton2Listener());

        jbutton3 = new JButton("rechner8135");
        jbutton3.addActionListener(new jbutton3Listener());


        
        jtextarea1 = new JTextArea();

        JScrollPane jscrollpane1 = new JScrollPane();
        jscrollpane1.setViewportView(jtextarea1);
        
        FormLayout layout = new FormLayout(
        		"right:pref, pref, left:pref:grow", 	// columns (Spalten)
        		"1dlu,pref,2dlu,pref,2dlu,pref,2dlu,2dlu,2dlu,[250dlu,min],2dlu"); 	// rows (Zeilen)
        		
        		builder = new PanelBuilder(layout);
        		builder.setDefaultDialogBorder();
        		CellConstraints cc = new CellConstraints();
        		
        		// builder.addSeparator("", cc.xyw(1, 1, 7));
        		
        		builder.add(jbutton1, cc.xy (2, 2));
        		builder.add(jbutton2, cc.xy (2, 4));
        		builder.add(jbutton3, cc.xy (2, 6));

        		builder.addSeparator("",cc.xyw (2, 8,2));
        		builder.add(jscrollpane1, cc.xywh (2,10,2,2));        		
        		
        		
        		jtextarea1.setSize(200, 200);

        		add(builder.getPanel());
	}
        
    public void go() {    
        		f = new JFrame("FormLayout Test");
        		f.setDefaultCloseOperation(2);
        		JMenuBar menuBar1;
        		JMenu menu1, menu2;
        		JMenuItem menuItem;
        	    menuBar1 = new JMenuBar();
        		
        		
        	    // Menu 1 (FILE)
        		menu1 = new JMenu("FILE");
        		menuItem = new JMenuItem("Start Ping");
        		menuItem.addActionListener(new StartPingListener());
        		menu1.add(menuItem);
        		menuItem = new JMenuItem("Stop Ping");
        		menuItem.addActionListener(new StopPingListener());
        		menu1.add(menuItem);
        		menuItem = new JMenuItem("Exit");
        		menuItem.addActionListener(new ExitListener());
        		menu1.add(menuItem);
        		menuBar1.add(menu1);
        		
        		// Menu 2 (HELP)
        		menu2 = new JMenu("HELP");
        		menuItem = new JMenuItem("Help");
        		menu2.add(menuItem);
        		menuItem = new JMenuItem("About");
        		menu2.add(menuItem);
        		menuBar1.add(menu2);
        		
        		
        		f.setJMenuBar(menuBar1);
        		
        		
        		f.add(new PanelB1());
        	        f.pack();
        	        f.setSize(800, 600);
        	        f.setVisible(true);

    
   }
    
    
    

    public void startMyPing() {
    	//nix
    }
    

    public void stopMyPing() {
    	//nix
    }
   
    
    
    ///////////////////////////////////////////////////////////////////////////////////////
    //		Get und Set Methoden
    /////////////////////////////////////////////////////////////////////////////////////
    
    public JTextArea getJtextarea1() {
		return jtextarea1;
    }

    public void setJtextarea1(String sjtextarea1) {
		jtextarea1.append(sjtextarea1);
    }
    
    
    
    
    

    ///////////////////////////////////////////////////////////////////////////////////////
    //		Innere ActionListener Klassen
    /////////////////////////////////////////////////////////////////////////////////////
    
    class StartPingListener implements ActionListener {
    	public void actionPerformed(ActionEvent event) {
    		
                setJtextarea1("startMyPing clicked: ");
    		jbutton1.setBackground(Color.blue);

    		//startMyPing();   		
    	}
    }
    
    class StopPingListener implements ActionListener {
    	public void actionPerformed(ActionEvent event) {
    		
                setJtextarea1("stopMyPing clicked: ");
    		//stopMyPing();
    	}
    }
    
    class ExitListener implements ActionListener {
    	public void actionPerformed(ActionEvent event) {
    		System.exit(0);    	
    	}
    }
    
    class jbutton1Listener implements ActionListener {
    	public void actionPerformed(ActionEvent event) {
    		setJtextarea1("Item rechner01 clicked: ");
    		jbutton1.setBackground(Color.blue);

    	}
    }
    
    
}


MAIN:
Java:
public class StartMain {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		PanelB1 pbe1 = new PanelB1();
		pbe1.go();
		pbe1.setVisible(true);
	}

}

Danke für die Hilfe,
Butti
 
es wäre von Vorteil, wenn du beim Posten im Forum auf dir vielleicht hilfreiche, allgemein aber eher unbekannte Sonderklassen
wie jgoodies, PanelBuilder verzichten würdest

die Listener sind ok, das Problem ist nur dass sie sich auf verschiedene TextAreas in verschiedenen Panels beziehen,
ein Panel davon ist in der GUI angezeigten, deren Listener reagieren gut,
das andere Panel ist nicht angezeigt, da bringt der Listener nicht viel

Tipps gegen solche häufigen Fehler:
- im Listener System.out.println() etwa des HashCodes der JTextArea -> unterschiedlich, Problem identifiziert,
und zeigt nebenbei dass der Listener überhaupt registiert ist und funktioniert

- im Konstruktor von PanelB1 eine Ausgabe -> 2x, das ist immer ungünstig,
am Konstruktor kann man auch verfolgen wo die Objekte erzeugt werden

kommst du mit diesen Informationen weiter?
letztlich muss derzeit nur eine Zeile geändert werden, ich verrate vorerst noch nicht welche 😉
 
Stimmt schon, Sonderklassen machen das unnötig kompliziert (versuche mich dran zu halten).



So funktioniert es jetzt!

Java:
public void go() {    
        	..
…
        	// f.add(new PanelB1());  > falsch !
        	f.add(this);   //         > richtig !
        	..
..
   }

Bin mir nur nicht ganz sicher ob du das meinst, und ich den Rest richtig verstanden habe..???:L

--im Listener System.out.println() etwa des HashCodes der JTextArea -> unterschiedlich..

So ??
System.out.println(jtextarea1.hashCode());

-- im Konstruktor von PanelB1 eine Ausgabe -> 2x
Sagt mir jetzt nicht ganz so viel



Danke und Gruß,
Butti
 
du hast richtig erkannt dass mit
> f.add(new PanelB1());
schlechterweise ein zweites Panel erzeugt wurde, die Klasse sollte nur genau einmal als Objekt benötigt werden

was macht eine Ausgabe (System.out.println(irgendwas)) im Konstruktor?
erscheint 2x wenn schlechterweise 2 Objekt erzeugt werden,
erscheint 1x wenn richtigerweise nur 1 Objekt erzeugt wird,

ergo ist das ein guter Test fürs Programm,
ist ja auch komplett egal
 

Zurück
Oben