PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zugriff auf ein Textfeld aus einer Klasse



d.ausstroit
07-06-2005, 10:48
Hai. Wie kann ich aus einer Klasse heraus auf das Textfeld eines JDialogs zugreifen. Ich habe schon versucht den Dialog mittels new zu erzeugen. Allerdings bewirkt das jedesmal ein Durchlaufen des Konstruktor vom Dialog und somit ist der Inhalt des Textfeldes nicht mehr abrufbar.
Danke für Eure Hilfe

Dirk

Lin728
07-06-2005, 11:25
Warum definierst dir du nicht dein Textfeld als Klassenvariable im Dialog und fügst ein getTextField() Methode hinzu, die dir das Textfeld zurückgibt?

d.ausstroit
07-06-2005, 11:29
Hallo. Könntest Du das für einen Java-Anfänger mit einem Beispiel darstellen?

Lin728
07-06-2005, 12:04
Hmmm...



class dialog1 extends JDoalig
{
JTextField f1;

public dialog1()
{
f1 =new JTextField();
}

public JTextField getField()
{
return f1;
}
}

...,.........................

d.ausstroit
07-06-2005, 12:20
Und wie kann ich dann in der anderen Klasse darauf zu greifen? Denn der Dialog ist ja dort nicht bekannt???

nul
07-06-2005, 13:45
class dialog1 extends JDialog
{
private JTextField f1;
private static dialog1 dialog = null;

private dialog1()
{
f1 =new JTextField();
}

public static dialog1 getInstance() {
if ( dialog == null )
dialog = new dialog1();
return dialog;
}

public JTextField getField()
{
return f1;
}
}

Ist ungetestet, aber so sollte es gehn. In anderen Klassen kannst du dann mit
dialog1.getInstance() eine Instanz der Klasse kriegen ( es wird immer nur dieselbe Instance zurueckgegeben ) und dann kanst du mit diesem Object die getField() aufrufen!

Lin728
07-06-2005, 15:08
Sehr gutes, kostenloses Java-Buch:
http://javabuch.de

d.ausstroit
07-06-2005, 15:55
Da muss ich jetzt durch. Mein Problem ändert sich durch diese Vorgehensweise überhaupt nicht. :rolleyes: Wenn ich dann in der Klasse mit getField auf das Textfeld im JDialog zugreife, steht da nicht der aktuelle Wert drin, sondern der, der beim erstenmal reingeschrieben wurde. So'ne Sch.... :mad:

Was mache ich falsch :confused:

nul
07-06-2005, 21:28
Wie waers wenn du mal postest, was du schon hast?

d.ausstroit
08-06-2005, 09:18
Hier kommt mal der vereinfachte Code:

Der Aufruf des Dialogs erfolgt aus einem Applet mittels:


public void jButton1_actionPerformed(ActionEvent e) {
Dialog1 dlg = new Dialog1();
dlg.setVisible(true);
}


Danach erfolgt über einen Button im Dialog ein Aufruf einer Methode aus einer anderen Klasse. Hier erstmal der Code des Dialoges:



package unbenannt10;

import java.awt.BorderLayout;
import java.awt.Frame;

import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.*;
import javax.swing.JTextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Dialog1 extends JDialog {
JPanel panel1 = new JPanel();
JButton jButton1 = new JButton();
JTextField jTextField1 = new JTextField();
JTextField jTextField2 = new JTextField();

public Dialog1() {
try {
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setSize(600,600);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}

private void jbInit() throws Exception {
panel1.setLayout(null);
jButton1.setBounds(new Rectangle(272, 17, 97, 30));
jButton1.setText("Test");
jButton1.addActionListener(new Dialog1_jButton1_actionAdapter(this));
jTextField1.setBounds(new Rectangle(58, 152, 192, 26));
jTextField2.setBounds(new Rectangle(57, 197, 196, 28));
getContentPane().add(panel1);
panel1.add(jButton1, null);
panel1.add(jTextField1);
panel1.add(jTextField2);
}

public void jButton1_actionPerformed(ActionEvent e) {
Testklasse tkl = new Testklasse();
tkl.testMethode(); }
}


class Dialog1_jButton1_actionAdapter implements ActionListener {
private Dialog1 adaptee;
Dialog1_jButton1_actionAdapter(Dialog1 adaptee) {
this.adaptee = adaptee;
}

public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}


Innerhalb der Methode "testMethode" erfolgt ein Kopieren eines Textfeldes in ein anderes. Hier der Code der weiteren Klasse:



package unbenannt10;
public class Testklasse {
Dialog1 dlg = new Dialog1();
public Testklasse() {
}

public void testMethode () {
String dws = dlg.jTextField1.getText();
dlg.jTextField1.setText(dws);

}
}


Ich vermute, da ich mir mit der Zeile "Dialog1 dlg = new Dialog1();" in der Testklasse, einen Zugriff auf den Dialog schaffe, dass hierbei der Konstruktor des Dialoges und alles was da zu gehört durchlaufen wird und dabei die Textfelder gelöscht werden. Angezeigt wird aber noch der richtige Text. Was mache ich denn falsch?

Sym
08-06-2005, 09:55
Da muss ich jetzt durch. Mein Problem ändert sich durch diese Vorgehensweise überhaupt nicht. :rolleyes: Wenn ich dann in der Klasse mit getField auf das Textfeld im JDialog zugreife, steht da nicht der aktuelle Wert drin, sondern der, der beim erstenmal reingeschrieben wurde. So'ne Sch.... :mad:

Was mache ich falsch :confused:
Bist Du sicher, dass da nicht der neue Wert drin ist? Vielleicht wird die Grafik einfach nur nicht aktualisiert.
Du Deinem Code als Tip: Variabeln kapseln, sprich nur über get- und set-Methoden zugänglich machen.

Lin728
08-06-2005, 12:57
Da muss ich jetzt durch...
....Was mache ich falsch :confused:
................................