Anzeige:
Ergebnis 1 bis 12 von 12

Thema: Zugriff auf ein Textfeld aus einer Klasse

  1. #1
    Registrierter Benutzer
    Registriert seit
    07.06.2005
    Beiträge
    7

    Zugriff auf ein Textfeld aus einer Klasse

    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

  2. #2
    Registrierter Benutzer
    Registriert seit
    16.09.2001
    Beiträge
    1.182

    Hmm..

    Warum definierst dir du nicht dein Textfeld als Klassenvariable im Dialog und fügst ein getTextField() Methode hinzu, die dir das Textfeld zurückgibt?
    Geändert von Lin728 (21-08-2017 um 14:27 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    07.06.2005
    Beiträge
    7
    Hallo. Könntest Du das für einen Java-Anfänger mit einem Beispiel darstellen?

  4. #4
    Registrierter Benutzer
    Registriert seit
    16.09.2001
    Beiträge
    1.182

    Hmm...

    Hmmm...

    class dialog1 extends JDoalig
    {
    JTextField f1;

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

    public JTextField getField()
    {
    return f1;
    }
    }
    ...,.........................
    Geändert von Lin728 (21-08-2017 um 14:27 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    07.06.2005
    Beiträge
    7
    Und wie kann ich dann in der anderen Klasse darauf zu greifen? Denn der Dialog ist ja dort nicht bekannt???

  6. #6
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377
    Code:
    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!
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  7. #7
    Registrierter Benutzer
    Registriert seit
    16.09.2001
    Beiträge
    1.182

    Hmm...

    Sehr gutes, kostenloses Java-Buch:
    http://javabuch.de
    Geändert von Lin728 (21-08-2017 um 14:28 Uhr)

  8. #8
    Registrierter Benutzer
    Registriert seit
    07.06.2005
    Beiträge
    7
    Da muss ich jetzt durch. Mein Problem ändert sich durch diese Vorgehensweise überhaupt nicht. 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....

    Was mache ich falsch

  9. #9
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377
    Wie waers wenn du mal postest, was du schon hast?
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  10. #10
    Registrierter Benutzer
    Registriert seit
    07.06.2005
    Beiträge
    7
    Hier kommt mal der vereinfachte Code:

    Der Aufruf des Dialogs erfolgt aus einem Applet mittels:
    Code:
        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:

    Code:
    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:

    Code:
    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?

  11. #11
    Registrierter Benutzer Avatar von Sym
    Registriert seit
    05.09.2002
    Ort
    Bremen
    Beiträge
    278
    Zitat Zitat von d.ausstroit
    Da muss ich jetzt durch. Mein Problem ändert sich durch diese Vorgehensweise überhaupt nicht. 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....

    Was mache ich falsch
    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.
    Denk mal drüber nach...

    Lars

    ACHTUNG: ersetze Linux durch GNU/Linux an den entsprechenden Stellen
    www.macuser.de, MSVC2005 Express und Qt, Qt/Mac installieren

  12. #12
    Registrierter Benutzer
    Registriert seit
    16.09.2001
    Beiträge
    1.182
    Zitat Zitat von d.ausstroit
    Da muss ich jetzt durch...
    ....Was mache ich falsch
    ................................
    Geändert von Lin728 (21-08-2017 um 14:28 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •