Zugriff auf Objekt einer anderen Klasse

FUT320

Mitglied
Guten Morgen,

ich komm Mal wieder nicht weiter.
Ich habe zurzeit zwei Klassen. Klasse 1 (Eingabe_oeffnen) ist nur ein Dialog mit Textfeldern, in welche Daten eingetragen werden. Klasse 2 ist ein Nummernblock, mit welchem Zahlen in ein Textfeld (Klasse 1) eingetragen werden können. Als Test habe ich versucht, den Inhalt von dem Textfeld in Klasse 1 in das Textfeld von Klasse 2 zu übertragen (tlPersnr = txtZahl). Das funktioniert aber nicht. Es erscheint kein Fehler o.ä. aber Textfeld "txtZahl" bleibt leer.

Klasse 1

Java:
public class Eingabe_oeffnen implements ActionListener {
 
    public JTextField txtPersnr = new JTextField(3);
 
    public void actionPerformed(ActionEvent eingabeoeffnen) {
     

    JPanel pnlEingabe = new JPanel();
        pnlEingabe.setBackground(Color.WHITE);
        pnlEingabe.setLayout(null);
 
    JDialog dlgEingabe = new JDialog();
        dlgEingabe.setTitle("Erfassung");
        dlgEingabe.add(pnlEingabe);
        /*dlgEingabe.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);*/
        dlgEingabe.setSize(800,800);
     
    JTextField txtUeberschriftEingabe = new JTextField("Sichtungsergebnisse",20);
        pnlEingabe.add(txtUeberschriftEingabe);
        txtUeberschriftEingabe.setBorder(BorderFactory.createEmptyBorder());
        txtUeberschriftEingabe.setBackground(Color.WHITE);
        txtUeberschriftEingabe.setEditable(false);
        txtUeberschriftEingabe.setBounds(10,10,460,80); 
        txtUeberschriftEingabe.setFont(new Font("headline",20,30));
     
    Date zeit = new Date();
    SimpleDateFormat aktuell = new SimpleDateFormat("dd.MM.yyyy");
    JFormattedTextField txtDatum = new JFormattedTextField();
        txtDatum.setText(aktuell.format(zeit));
        pnlEingabe.add(txtDatum);
        txtDatum.setBounds(160,90,80,30);
     
    JTextField beschriftungDatum = new JTextField("Erfassungsdatum");
        pnlEingabe.add(beschriftungDatum);
        beschriftungDatum.setEditable(false);
        beschriftungDatum.setBackground(Color.WHITE);
        beschriftungDatum.setBorder(BorderFactory.createEmptyBorder());
        beschriftungDatum.setFont(new Font("Titel",10,15));
        beschriftungDatum.setBounds(20,90,120,30);
 
 
    JButton btnDatum = new JButton("Datum");
        pnlEingabe.add(btnDatum);
        btnDatum.setBounds(260,90,80,30);
        btnDatum.addActionListener(new Kalender());
             
    JTextField tlPersnr = new JTextField("Personalnummer");
        pnlEingabe.add(tlPersnr);
        tlPersnr.setEditable(false);
        tlPersnr.setBackground(Color.WHITE);
        tlPersnr.setBorder(BorderFactory.createEmptyBorder());
        tlPersnr.setFont(new Font("Titel",10,15));         
        tlPersnr.setBounds(20,130,120,30);
 
     
     
        pnlEingabe.add(txtPersnr);
        txtPersnr.setBounds(160,130,80,30);
        txtPersnr.addMouseListener(new Nummernblock());
        txtPersnr.setText("8");
             
        dlgEingabe.setVisible(true);
     
    } 
}

Klasse 2

Java:
public class Nummernblock extends Eingabe_oeffnen implements MouseListener  {
 
    public void mouseClicked(MouseEvent a) {
    JPanel pnlZahlenblock = new JPanel();
    pnlZahlenblock.setBackground(Color.WHITE);
    pnlZahlenblock.setLayout(null);
 
    JTextField txtZahl = new JTextField();
    pnlZahlenblock.add(txtZahl);
    txtZahl.setBounds(50,10,270,30);
    String tmp = txtPersnr.getText();
    txtZahl.setText(tmp);
 
                 
    JDialog dlgNummer = new JDialog();
    dlgNummer.add(pnlZahlenblock);
    dlgNummer.setTitle("Nummernblock");
    dlgNummer.setSize(380,400);
    /*dlgNummer.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);*/
    dlgNummer.setResizable(false);
     
    dlgNummer.setVisible(true);
    }
  
    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
    }

}

Ich bin für alle Tipps dankbar!
 
Zuletzt bearbeitet von einem Moderator:
Verwirrend.

Änder mal bitte folgendes in deiner EingabeOeffnen-Klasse

Code:
pnlEingabe.add(txtPersnr);
txtPersnr.setBounds(160,130,80,30);
txtPersnr.setText("8");
txtPersnr.addMouseListener(new Nummernblock());

vorher hast du den Listener hinzugefügt und dann den Text gesetzt, sprich wo du ihn setzt ist dem Listener nicht bekannt was im Textfeld drin steht. Erst den Text setzen und dann den Listener zuweisen. So sollte es nun laufen.
 
Ich bin mir nicht sicher, (wie gesagt sehr verwirrend alles) Ich glaube du hast da eine Zirkulation drin -> StackOverflow-Exception.
 
Aber müsste es dann nicht einen Fehler anzeigen?
Was meinst du genau mit verwirrend, meinen Code und/oder die Fragestellung? Falls dir irgendetwas ins Auge sticht, was ich besser lösen könnte, bitte immer raus damit.
 
Starte das ganze mal im Debugger ... ja, ich bin mir wegen der Struktur der Klasse nicht ganz sicher. Ich hätte das eventuell etwas anders aufgebaut, da ich aber dein Programm nicht kenne, kann ich jetzt schlecht Tipps geben.
 
Hallo,
da ich mit meiner bisherigen Vorgehensweise nicht weiter kam, habe ich mich Mal an den Get-/Set Methoden versucht.

Klasse 1
Java:
Klasse 1

public class Eingabe_oeffnen implements ActionListener   {
   
    private JTextField txtPersnr = new JTextField("hallo");
       
    public void setTxtPersnr(JTextField neu1){
        txtPersnr = neu1;}
   
    public JTextField getTxtPersnr(){
        return txtPersnr;}
 
    public void actionPerformed(ActionEvent eingabeoeffnen) {
   
    GridLayout gdl = new GridLayout(0,2);   
    JPanel pnlEingabe = new JPanel();
        pnlEingabe.setBackground(Color.WHITE);
        pnlEingabe.setLayout(gdl);
        dlgEingabe.setTitle("Erfassung");
        dlgEingabe.add(pnlEingabe);
        dlgEingabe.setSize(800,800);
       
    JTextField beschriftungDatum = new JTextField("Erfassungsdatum");
        beschriftungDatum.setEditable(false);
        beschriftungDatum.setBackground(Color.WHITE);
        beschriftungDatum.setFont(new Font("Titel",10,15));   
       
    Date zeit = new Date();
        SimpleDateFormat aktuell = new SimpleDateFormat("dd.MM.yyyy");
        JFormattedTextField txtDatum = new JFormattedTextField();
            txtDatum.setText(aktuell.format(zeit));
            txtDatum.addMouseListener(new Kalender());

    JTextField tlPersnr = new JTextField("Personalnummer");
        tlPersnr.setEditable(false);
        tlPersnr.setBackground(Color.WHITE);
        tlPersnr.setFont(new Font("Titel",10,15));           
       
        txtPersnr.addMouseListener(new Nummernblock());
   
    JTextField beschriftungProdDatum = new JTextField("Produktionsdatum");
        beschriftungDatum.setEditable(false);
        beschriftungDatum.setBackground(Color.WHITE);
        beschriftungDatum.setFont(new Font("Titel",10,15));   
       
    JTextField prodDatum = new JTextField();
        prodDatum.setBackground(Color.WHITE);
        prodDatum.addMouseListener(new Kalender());
       
    JTextField beschriftungAnlage = new JTextField("ANlage");
        beschriftungAnlage.setEditable(false);
        beschriftungAnlage.setBackground(Color.WHITE);
        beschriftungAnlage.setFont(new Font("Titel",10,15));   
       
    pnlEingabe.add(beschriftungDatum);
    pnlEingabe.add(txtDatum);
    pnlEingabe.add(tlPersnr);
    pnlEingabe.add(txtPersnr);
    pnlEingabe.add(new JTextField ("Artikelnummer"));
    pnlEingabe.add(new JTextField (" "));
    pnlEingabe.add(new JTextField ("Arbeitsauftrag"));
    pnlEingabe.add(new JTextField (" "));
    pnlEingabe.add(beschriftungProdDatum);
    pnlEingabe.add(prodDatum);
        dlgEingabe.setVisible(true);
 
    }   
       
}

Klasse 2
Java:
public class Nummernblock extends Eingabe_oeffnen implements MouseListener  {
    
    Eingabe_oeffnen nummerObjekt = new Eingabe_oeffnen();   
   
    public void mouseClicked(MouseEvent a) {
               
    JPanel pnlZahlenblock = new JPanel();
    pnlZahlenblock.setBackground(Color.WHITE);
    pnlZahlenblock.setLayout(null);

    JButton btn7 = new JButton("7");
    pnlZahlenblock.add(btn7);
    btn7.setBounds(50,50,60,60);
    btn7.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
           
            if(e.getSource () == btn7){
               
                System.out.println("aktueller Wert im TextFeld:" +nummerObjekt.getTxtPersnr().getText());
                nummerObjekt.setTxtPersnr(new JTextField("8"));
                System.out.println("neuer Wert im TextFeld:"+nummerObjekt.getTxtPersnr().getText());

    JDialog dlgNummer = new JDialog();
    dlgNummer.add(pnlZahlenblock);
    dlgNummer.setTitle("Nummernblock");
    dlgNummer.setSize(380,400);
    dlgNummer.setResizable(false);
       
    dlgNummer.setVisible(true);
   
       
    }
   

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
       
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
       
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
       
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
       
    }

}

Ich versuche mich etwas verständlicher als bisher auszudrücken. In Klasse 1 habe ich ein Textfeld mit dem Inhalt "hallo", welches sich in einem Dialog befindet. Diesen Inhalt möchte ich über einen Button (btn7) in Klasse 2 auslesen. Das funktioniert auch soweit. Anschließend soll der Wert des Textfeldes neu gesetzt werden - auf 8. Auch das funktioniert. Wie schaffe ich es aber nun, dass das Textfeld in Klasse 1 aktualisiert wird? Nachdem der Button betätigt wurde, soll sich der Wert im Textfeld ändern. Ich möchte es nicht nur in der Konsole ausgeben, sondern es direkt im Dialog sehen. Geht das irgendwie? Über Hilfe wäre ich sehr dankbar!
 

Neue Themen


Zurück
Oben