in JList einfügen erfolglos

  • Themenstarter Themenstarter erwin
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
E

erwin

Gast
Hallo,

Ich möchte, dass in meine jlist auf button-klick neue daten eingefügt werden.
Hab übers DefaultListModel gelesen und das versucht.
Jlist ist sichtbar und button auch.

Aber auf button-klick passiert nix.
Hab ich was vergessen?
Bestimmt. Aber was?

Code:
import java.util.Vector;
import javax.swing.JPanel;

import javax.swing.JList;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JScrollPane;

public class Statistik extends JPanel implements ActionListener{
  private JList list;
  private JButton enter;
  DefaultListModel dlm = new DefaultListModel(); 
  
    public Statistik() {
    
    list = new JList( dlm );
    
    enter = new JButton("Enter");
    
    JScrollPane pane = new JScrollPane(list);

    add(pane, BorderLayout.CENTER);
    add(enter, BorderLayout.CENTER);

    for( int i = 0; i < 3 ; i++ ){ //drei werte werden in die jlist gefüllt
      dlm.addElement(String.valueOf( i )); 
    }
     
  }
  
    
    public void actionPerformed(ActionEvent ae){
        if(ae.getSource() == enter){
            
              dlm.addElement("Hallo");   
              //warum wird "Hallo" nach button-klick nicht in der liste angezeigt?
        }
    }
}
 
Hallo Bernd,

danke, aber reicht nicht.
Wenn ich schreibe:
Code:
    public void actionPerformed(ActionEvent ae){
        if(ae.getSource() == enter){
            
              dlm.addElement("Hallo");
              dlm.fireTableDataChanged();
        }
    }

krieg ich kompiler-fehler

Statistik.java:42: cannot resolve symbol
symbol : method fireTableDataChanged ()
location: class javax.swing.DefaultListModel
dlm.fireTableDataChanged();
 
mic_checker hat gesagt.:
btw. bin ich blind oder wo fügst du den Action Listener dem Button hinzu ?

das gab mir den entscheidenden hinweis. ;-)
Hatte
Code:
enter.addActionListener( this );
vergessen
Danke.
Dann mal weiter.
Ich möchte ja nicht wirklich "hallo" über button einfügen, sondern:
Hab außer der o.g. klasse eine separate klasse
Code:
public class TwsRequest implements EWrapper{
darin den konstruktor
Code:
    public TwsRequest(String[] contractvars) {
        m_client.eConnect("",7496, startzeit);// letzes argument ist client id
        int count = 0;

        Contract contract = new Contract();
        contract.m_symbol=contractvars[1];

        m_client.reqMktData(id,contract);

         Thread.yield();

    }

    public void tickPrice(int tickerId, int field, double price, int canAutoExecute) {
        
           
        switch (field){
            
                     
            case 1:  //bid
                bidp = String.valueOf(price);
                System.out.println("Bid Price = "+bidp);
                break;
            case 2:  //ask
                askp = String.valueOf(price);
                System.out.println("Ask Price = "+askp);
                break;
            case 4:  //last
                System.out.println("Last Price = "+String.valueOf(price));
                lastp = String.valueOf(price);
                kurse.addElement (lastp);//verktor befüllen
                dlm.removeAllElements();
                dlm.addElement(lastp);
                
                GregorianCalendar cal2 = new GregorianCalendar(Locale.GERMANY);
                zeit = cal2.get(Calendar.HOUR_OF_DAY) +":"+(cal2.get(Calendar.MINUTE)) +":"
                +cal2.get(Calendar.SECOND);
                break;
//usw.


Ich möchte jetzt gerne erreichen, dass immer wenn case 4 eintritt (zeile 43)
soll lastp (zeile 45) in meiner Jlist angezeigt werden.

Geht natürlich so (zeile 32, 33) nicht, weil:
TwsRequest.java:108: cannot resolve symbol
symbol : variable dlm
location: class dryes.TwsRequest
dlm.removeAllElements();

Wie kann ich das dlm.remove... in dieser klasse bekannt machen?

Bitte.
 
ok. Versuch ich mal.
Hab jetzt so geschrieben:
Code:
public void tickPrice(int tickerId, int field, double price, int canAutoExecute, DefaultListModel dlm) {

leider führt das zu:
TwsRequest.java:23: dryes.TwsRequest is not abstract and does not override abstract method tickPrice(int,int,double,int) in com.ib.client.EWrapper
public class TwsRequest implements EWrapper{
1 error

heul
 
In dem Interface existiert die Methode tickPrice(int,int,double,int)...du implementierst das Interface , d.h. du musst diese Methode mit der Signatur implementieren.

Kannst du die Signatur der Methode in EWrapper nicht ändern? Oder geht das aus irgendnem Grund nicht?
 
Hallo mic,

danke, dass Du bei der stange bleibst.

Also EWrapper ist teil einer API, über die ich daten bekomme.
Es wird ausdrücklich gesagt, dass man EWrapper nicht verändern, sondern darauf aufbauen soll, weil wenn sie die API mal ändern .... (so ungefähr hab ich das verstanden).

Wenn es also ein verfahren gibt, die über die API reinkommenden daten irgendwie aus
Code:
public void tickPrice
rauszukriegen, ohne in EWrapper einzugreifen, wär ich echt interessiert.

ich hab in die methode tickPrice schon (mehr schlecht als recht) einen BufferedWriter reingepfriemelt, der die daten in ne date schreibt, aber ich möcht sie gerne "direkt" abzapfen (und z.B. immer die neuesten ner liste darstellen).
 
Du könntest natürlich die Methode so implementieren wie sie im Interface steht und zusätzlich die Variante wie du sie entwickelt hast, da du die Methode dann implementiert hast meckert er nicht mehr.

Das würd ich aber nur so machen wenn du es schnell zum laufen kriegen willst.

Muss jetzt leider off, komm nachher nochma...
 
Hallo mic,

schnell zum laufen kriegen ist zweitrangig.
Ich möchte es, wenn's geht RICHTIG hinkriegen, leider bin ich dazu etwas zu schwach auf der brust.

Ich hab schon versucht, die ankommenden daten in einen vektor zu füllen. Das funktioniert glaub ich auch.
Wichtig wär halt, dass jedes mal, wenn case 4 eintritt, ein "event oder sowas gefeuert wird", so dass man außerhalb der methode mitkriegt, dass der vektor mit einem neuen wert befüllt wurde.

Ich hoffe ich formulier das verständlich.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben