Java Events & Listener

bl4ck29

Mitglied
Hallo,

ich such nen tutorial oder einsteiger infos über events, listener und deren handling. ich hab div sachen im netz gesehn und versucht zu verstehen, aber irgendwie klappt das alles nicht. es wäre natürlich von vorteil wenn es sachen in deutsch wären, aber englisch wird zur not auch gehn. mir würde vielleicht auch schon ein beispiel reichen wie beispielsweise ein button druck in der gui nen event abfeuert was dann im model bearbeitet wird. ich hab auch schon im forum gesucht, aber nix wirklich hilfreiches gefunden....

schönen dank schonmal
 
ich brauch am besten nen einfach zu verstehendes praktisches beispiel und am besten nich das beispiel button. oder mal was anderes....

ich hab bis jetzt 2 teile geschrieben..

1. gui mit Jlist die vector inhalt anzeigt
2. vector der ListModel implementiert

3. nen listener (der fehlt mir noch)
4. passendes event

so nun will ich wenn ich was über nen jdialog einfüge das das event an den listener gesendet wird und der das in den vector einfügt

vielleicht kann mir so jemand helfen
 
Also imho sind die Beispiele aus dem obigen Post recht gut zu verstehen. Aber nun gut ...
Wenn du schon was geschrieben hast, wäre es eventuell nicht schlecht, wenn du den Code mal mit postest.

MfG
Sebastian
 
also hier mal der code mit dem ich versucht hab das zu lösen...

Code:
package EventTest;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import javax.swing.WindowConstants;
import javax.swing.JScrollPane;
import javax.swing.JList;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.event.*;
import javax.swing.event.*;
import EventTest.*;
 
public class EventTest extends javax.swing.JFrame implements ActionListener, ListDataListener{
 private JPanel jPanel1;
 private JPanel jPanel2;
 private List model;
	private JButton remove;
	private JButton add;
	private JTextField tf;
	private JList list;
 /**
 * Auto-generated main method to display this JFrame
 */
 public static void main(String[] args) {
  EventTest inst = new EventTest();
  inst.setVisible(true);
 }
 
 public EventTest() {
  super();
  initGUI();
 }
 
 private void initGUI() {
  try {
   setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			model = new List();
			model.addListDataListener(this);
			{
				jPanel1 = new JPanel();
				JScrollPane scroll = new JScrollPane();
				list = new JList();
				scroll.setViewportView(list);
				jPanel1.add(scroll);
				this.getContentPane().add(jPanel1, BorderLayout.NORTH);
			}
			{
				jPanel2 = new JPanel();
				add = new JButton("add");
				add.addActionListener(this);
				remove = new JButton("del");
				remove.addActionListener(this);
				tf = new JTextField(10);
				jPanel2.add(tf);
				jPanel2.add(add);
				jPanel2.add(remove);
				this.getContentPane().add(jPanel2, BorderLayout.SOUTH);
			}
   pack();
   setSize(400, 300);
  } catch (Exception e) {
   e.printStackTrace();
  }
	}
	
	public void actionPerformed(ActionEvent ae){
		Object o = ae.getSource();
		if(o==add){
			model.addString(tf.getText());
			contentsChanged(new ListDataEvent(this,ListDataEvent.CONTENTS_CHANGED,0,model.getSize()));
		}
	}
	
	public void contentsChanged(ListDataEvent le){
		
	}
	public void intervalAdded(ListDataEvent le){
		
	}
	public void intervalRemoved(ListDataEvent le){
		
	}
}

ka was in die methoden muss hab schon alles versucht...

Code:
package EventTest;
import java.util.Vector;
import javax.swing.ListModel;
import javax.swing.event.EventListenerList;
import javax.swing.event.ListDataListener;
public class List implements ListModel{
	private Vector<String> vec;
	private EventListenerList ldl;
	
	public List(){
		vec = new Vector<String>();
		ldl = new EventListenerList();
	}
	public void addString(String s){
		vec.add(s);
	}
	public String getElementAt(int i){
		return vec.get(i);
	}
	public void addListDataListener(ListDataListener l){
	   ldl.add(ListDataListener.class, l);
	}
	public void removeListDataListener(ListDataListener l){
		ldl.remove(ListDataListener.class, l);
	}
	public int getSize(){
		return vec.size();
	}
}

ich hoffe mir kann jemand ansatzweise helfen ;)

danke schonmal
 
Kann es sein, dass du sowas ungefähr wolltest?

Code:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.WindowConstants;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JList;
import javax.swing.JButton;
import javax.swing.JTextField;


public class EventTest extends JFrame {
    private JPanel panel1;

    private JPanel panel2;

    private JButton removeButton;

    private JButton addButton;

    private JTextField textfield;

    private JList list;
    
    private Vector<String> vector;
    
    public static void main(String[] args) {
        EventTest inst = new EventTest();
        inst.setVisible(true);
    }

    public EventTest() {
        initGUI();
    }

    private void initGUI() {
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

            panel1 = new JPanel();
            vector=new Vector<String>();
            list = new JList(vector);
            list.setSize(200,100);
            JScrollPane scroll = new JScrollPane(list);
            panel1.add(scroll);
            add(panel1, BorderLayout.NORTH);

            panel2 = new JPanel();
            addButton = new JButton("add");
            addButton.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    vector.add(textfield.getText());
                    list.updateUI();
                }
                
            });
            removeButton = new JButton("del");
            removeButton.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    vector.remove(textfield.getText());
                    list.updateUI();
                }
                
            });
            textfield = new JTextField(10);
            panel2.add(textfield);
            panel2.add(addButton);
            panel2.add(removeButton);
            add(panel2, BorderLayout.SOUTH);

            pack();
            setSize(400, 300);
    }
}

Nicht wundern, habe mal einwenig gekürzt und ein paar Namen zwecks Übersichtlichkeit geändert.
Sollte das nicht das sein, was du wolltest, poste nochmal.

MfG
Sebastian
 
nein....

es muss über events und listener gelöst werden da mein eigentliches programm etliche klassen hat und ich das nich alles einfach so simple machen kann, wenn alles in eine klasse "passt" ist dein ansatz sicherlich richtig, nur das is nicht das was ich suche...
 
Zurück