Variable

crazy_chicken

Erfahrenes Mitglied
Hallo Zusammen, hab folgendes Problem.
Ich habe eine Klasse GUI und da ein
jTextField1.

Ich habe noch eine andere klasse Klasse 2, und da gibt es eine Methode und ich will, dass sobald diese Methode aufgerufen wird den Inhalt des JTextField1 ändern(jTextField1.setText()).....Diese Methode ist ohne button, wartet auf die nachricht und sobald sie eingeht, wird diese MEthode aufgerufen und soll die jTextField inhalt aus der anderen Klasse ändern....

Falls jemnad es weiß, so bräuchte ich ein Beispiel, damit ich es auch verstehn kann...

Danke im Voraus******
 
du musst eine refferrenz auf das JTextField an die 2te klasse übergeben ... oder eine refferrenz auf klasse 1 selbst und dann das JTextField public deklarieren ...
dann kannst du auch von "außen" darauf zugreifen ...

meine gegenfrage an dich ist jetzt : wie wird klasse 2 gestartet ? ... aus klasse 1 herraus ? ... dynamisch über n ClassLoader ? ... als zweite main *also eigenständiger prozess* ?
und ein bisschen code von dem was du bereits hast wäre sehr hilfreich ... ansonsten könnt ich dir jetzt 3 möglichkeiten hinklatschen die das machen was du willst aber von denen du nur eine verstehen würdest *für die interessiert : ein übergabe der refferrenz , dann mit ClassLoader und reflections und als drittes Pipes / Sockets*

es hängt also von dem ab wie du es strukturieren willst und wie genau dein projekt arbeiten soll ...

du müsstest dann die änderung noch synchronisieren das es nicht vorkommt das ein user einen string eingibt der aber durch setText() gelöscht und ein neuer eingefügt wird und der user dann am ende dieses strings weiterschreibt ... sowas kann man einfach durch ableiten von PlainDocument und nem boolean lösen ....

du siehst also : ein paar mehr infos als nur : aus klasse zwei will ich auf ein member in klasse eins zugreifen .... brauchen wir schon ... weil es ein paar mehr möglichkeiten gibt genau das zu realisieren
 
Hallo,
Danke erstmal!

Also ich habe eine Klasse MeinClient der von Client erbt.
Java:
public class MeinClient extends Client{
 
  chat chat;  

   public MeinClient(String pServerIP, int pServerPort ){
     super( pServerIP, pServerPort);
   }

   public void processMessage(String pMessage){
      chat.jTextArea2.setText(pMessage);   //Funktionert so nicht!

   }

}

Also jTextField1 befindet sich in der Klasse "chat".
die Methode processMessage überwacht den Port und sobald eine Nachricht ankommt, soll
Textfeld geändert werden...

Ich hoffe die Problemstellung ist klar.
Also ich habe versucht "public jTextfield" zu benutzen, klappt auch nicht.
Hoffe jetzt kannst du mir weiter helfen....=)
 
Zuletzt bearbeitet von einem Moderator:
Wenn du in Java programmierst, nimm doch auch java-code tags und keine php tags ^^

Deine Klasse "MeinClient" kennt doch 'chat' gar nicht (jedenfalls nicht laut dem Code). Wo erstellst du 'MeinClient', in der Chat Klasse?
 
Hi, hab jetzt geändert oben.
ich deklariere "chat chat";

chat chat= new chat(); kann ich leider nicht machen, weil das eine GUI ist...oder..=)
 
Hi

du musst der Instanz einen anderen Namen geben als der Klasse.
zB
Java:
chat chat1=new chat();

Gruß
 
Zuletzt bearbeitet:
chat:
Java:
public class chat extends JFrame {
  // Anfang Attribute
  MeinClient client;
  
  public JTextArea jTextArea2 = new JTextArea("");
 

  public chat(String title) {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    int frameWidth = 703;
    int frameHeight = 356;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten


    jTextArea1.setText("");
    jTextArea1.setBounds(24, 120, 305, 161);
    cp.add(jTextArea1);
    jTextArea2.setText("");
    jTextArea2.setBounds(368, 120, 297, 161);
    cp.add(jTextArea2);
    jTextField1.setBounds(192, 40, 121, 24);
    jTextField1.setText("192.168.178.51");
    cp.add(jTextField1);
    jTextField2.setBounds(376, 40, 121, 24);
    jTextField2.setText("8182");
    cp.add(jTextField2);
    jButton1.setBounds(248, 296, 75, 25);
    jButton1.setText("Senden");
    jButton1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton1_ActionPerformed(evt);
      }
    });
 
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Methoden
  public void jButton1_ActionPerformed(ActionEvent evt) {
     String ip= jTextField1.getText();
     int port=Integer.parseInt(jTextField2.getText());
     client = new MeinClient(ip, port);
  }

  // Ende Methoden

  public static void main(String[] args) {
    new chat("chat");
  }
}
 
Java:
chat chat1= new chat();
Exception in thread "Thread-4" java.lang.NullPointerException
at MeinClient.processMessage(MeinClient.java:21)
at Client$Clientempfaenger.run(Client.java:55)
 
Zuletzt bearbeitet:
Du machst doch schon
Java:
client = new MeinClient(ip, port);
in deiner Chat Klasse.
Dort kannst du doch einfach deinen chat mitgeben.
Java:
client = new MeinClient(ip, port, this);
Und schon hast du im MeinClient den chat verfuegbar, um dort
Java:
chat.methodenname
zu machen.
Vielleicht solltest du mit was weniger komplexem als einem GUI chat anfangen.

Klassennamen schriebt man uebrigens normalerweise Gross.
Variablen macht man normalerweise auch nicht public. Sondern schreibt eine Methode, die den Wert einer Variablen aendern (getter/ setter)
 
Zurück