Action Listeners for JTextFields

G

George

Dear All,

I am trying to use JFrame and JTextField, so that whenever a button is
clicked a message box will come up with the contents of the textfield.
These are defined as follows:

class Test extends JFrame implements ActionListener {
Jpanel p1 = new JPanel();
JTextField jtf = new JTextField();
p1.add(jtf);
this.add(p1);
JButton jb = new JButton("Click Me!");
this.add(jb);
jb.addActionListener(this);
(of course these commands are within an initialisation method)

The action listener is implemented as follows:

public void actionPerformed(ActionEvent e){
System.out.println(jtf.getText());
}

However, this gives me the error message that jtf can not be resolved. Is
it because it is inside a panel and how can I reference the panel and then
the textfield inside?

I look forward to hearing from you soon.

Many thanks in advance.

George
 
A

Andrew Thompson

George wrote:
...
...this gives me the error message that jtf can not be resolved.

Odd you should say that. That is *not* the error I
am getting here, for *this* version of the code.

<sscce>
import java.awt.event.*;
import javax.swing.*;

class Test extends JFrame implements ActionListener {

Test() {
JPanel p1 = new JPanel();
JTextField jtf = new JTextField();
p1.add(jtf);
this.add(p1);
JButton jb = new JButton("Click Me!");
this.add(jb);
jb.addActionListener(this);
}

/** The action listener is implemented as follows */
public void actionPerformed(ActionEvent e){
System.out.println(jtf.getText());
}
}
</sscce>

D:\Test.java:18: cannot find symbol
symbol : variable jtf
location: class Test
System.out.println(jtf.getText());

Why does it report "jtf can not be resolved", where
you are?

BTW. Note that I posted an SSCCE*. An SSCCE
helps to explain a problem to people, far better than
code snippets. Please consider posting SSCCE's,
rather than code snippets, in future.

* said:
I look forward to hearing from you soon.

This is usenet. It is not uncommon to wait 72 hours
before getting a reply - or no reply at all.
 
A

Andrew Thompson

Some other variants to consider..

<sscce>
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class Test2 extends JFrame implements ActionListener {

// scope class..
JTextField jtf = new JTextField(20);

Test2() {
JPanel p1 = new JPanel();
p1.add(jtf);
// layout constraint
this.add(p1, BorderLayout.NORTH);
JButton jb = new JButton("Click Me!");
// layout constraint
this.add(jb, BorderLayout.CENTER);
jb.addActionListener(this);
}

/** The action listener is implemented as follows */
public void actionPerformed(ActionEvent e){
System.out.println(jtf.getText());
}

/** Add a simple main to throw it on-screen */
public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
Test2 test = new Test2();
test.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);
test.pack();
test.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
</sscce>

..and..

<sscce>
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class Test3 extends JFrame {

Test3() {
JPanel p1 = new JPanel();
// scope local, must be final..
final JTextField jtf = new JTextField(20);
p1.add(jtf);
// layout constraint
this.add(p1, BorderLayout.NORTH);
JButton jb = new JButton("Click Me!");
// layout constraint
this.add(jb, BorderLayout.CENTER);
//jb.addActionListener(this);
// implement actionlistener as inner class
jb.addActionListener(
new ActionListener(){
/** The action listener is implemented as follows */
public void actionPerformed(ActionEvent e){
System.out.println(jtf.getText());
}
});
}

/** Add a simple main to throw it on-screen */
public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
Test3 test = new Test3();
test.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);
test.pack();
test.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
</sscce>

HTH

--
Andrew Thompson
http://www.athompson.info/andrew/

Message posted via JavaKB.com
http://www.javakb.com/Uwe/Forums.aspx/java-general/200710/1
 
R

Roedy Green

However, this gives me the error message that jtf can not be resolved. Is
it because it is inside a panel and how can I reference the panel and then
the textfield inside?

Normally you make jtf an instance variable then you don't have the
problem. When they are local variables, they must be final to be seen
in the anonymous inner class. I kid you not.

See http://www.mindprod.com/jgloss/nestedclasses.html
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,754
Messages
2,569,521
Members
44,995
Latest member
PinupduzSap

Latest Threads

Top