Inhalt eines JTextFields ermitteln

fastfiler

Mitglied
Hallo,

ich will den inhalt eines JTextField in nen String schreiben - vom prinzip her auch total simpel. aber es klappt nicht... mir is auch eigentlich klar warum, ecplise deklarieret mir den string automatisch als final ... wahrscheinlich is die lösung so einfach bzw. liegt so nahe aber ich sehs einfach ned... für lösungsvorschläge oder anregungen wär ich dankbar.

mfg & thx
fasti

Code:
public class X{

public static void main(String[] args) {

final String str; 
JFrame jf = new JFrame("test");
JPanel namePanel = new JPanel();
JLabel label = new JLabel("Name:", new ImageIcon("triblue.gif"),SwingConstants.LEFT);
namePanel.add(label);
final JTextField tf = new JTextField(40);

tf.addActionListener( new java.awt.event.ActionListener() { 
public void actionPerformed( final java.awt.event.ActionEvent e ) { 
str=tf.getText(); }
});

namePanel.add(tf);
namePanel.setBorder(BorderFactory.createEtchedBorder());
jf.getContentPane().add(namePanel, BorderLayout.NORTH);

jf.setSize(600, 450);
jf.setVisible(true);
		
System.out.println(str);
}
}
 
Moin,
bin nicht ganz sicher, aber kann es nicht sein, dass bei einem JTextField keine Action abgefangen wird? Ähnlich wie bei einem JLabel?
Was passiert denn, wenn Du den Inhalt des JTextFields durch einen Button-Klick ausliest? Sollte normalerweise funktionieren - zumindest wird das so hundert- oder gar tausendfach gemacht.
 
hi,

wäre ne möglichkeit - aber anscheined für so grafisches zeugs doof oder unkreativ - auch hier verlangt eclipse, dass der string als static deklariert ist.

du hast doch bestimmt ein einfachesbeispiel parat?

wäre nett - danke

fasti
 
Eigentlich nicht, aber ist in 5min erledigt. ^^

Code:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class DummyFrame extends JFrame
{

  private BorderLayout borderLayout = new BorderLayout();
  private JPanel mainPanel = new JPanel();
  private JTextField jtfDummy = new JTextField(20);
  private JButton jbDummy = new JButton();
  
  public DummyFrame()
  {
    super("Dummy Frame");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(200, 300);
    initGUI();
  }
  
  private void initGUI()
  {
    jbDummy.setText("Zeig den Inhalt des Textfelds an");
    jbDummy.addActionListener(new ActionListener(){
      public void actionPerformed( ActionEvent arg0 )
      {
        JOptionPane.showMessageDialog(null, "Der Inhalt des Textfields lautet: " + jtfDummy.getText());
      }});
    getContentPane().setLayout(borderLayout);
    getContentPane().add(jbDummy, BorderLayout.SOUTH);
    getContentPane().add(jtfDummy, BorderLayout.NORTH);
    
  }

  public static void main( String[] args )
  {
    new DummyFrame().show();
  }
}
 
hallo,

vielen dank, aber es ist nicht ganz das was ich meine

es soll oben bei den variablen noch ein private String deklariert sein und dort wo du den text mit

Code:
JOptionPane.showMessageDialog(null, "Der Inhalt des Textfields lautet: " + jtfDummy.getText());

dem dialog übergibst soll mit getText() dem deklarierten string der inhalt des textfields übergehen/zugewiesen werden

d.h. im prinzip würde ein
Code:
dummyString = jtfDummy.getText();
reichen. wie gesagt, das problem ist der string kommt dort nie an.
 
So?

Code:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class DummyFrame extends JFrame
{
  private String m_sTextField;
  private BorderLayout borderLayout = new BorderLayout();
  private JPanel mainPanel = new JPanel();
  private JTextField jtfDummy = new JTextField(20);
  private JButton jbDummy = new JButton();
  
  public DummyFrame()
  {
    super("Dummy Frame");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(200, 300);
    initGUI();
  }
  
  private void initGUI()
  {
    jbDummy.setText("Zeig den Inhalt des Textfelds an");
    jbDummy.addActionListener(new ActionListener(){
      public void actionPerformed( ActionEvent arg0 )
      {
        m_sTextField = jtfDummy.getText();
        JOptionPane.showMessageDialog(null, m_sTextField);
      }});
    getContentPane().setLayout(borderLayout);
    getContentPane().add(jbDummy, BorderLayout.SOUTH);
    getContentPane().add(jtfDummy, BorderLayout.NORTH);
  }

  public static void main( String[] args )
  {
    new DummyFrame().show();
  }
}
 
Ich glaube sein Problem ist einfach nur, dass er den String in einer Methode (main) deklariert hat und bei dir (Snake) ist es ein Klassenattribut.

Warum aber nun die Attribute als final deklariert werden müssen, wenn es in einer Methode ist weiss ich aber selber nicht :D
 
Zurück