问题描述:
有一些Button,我点击一个数字Button就将它上面的值传入到文本框中,我通过tx.getText()得到了此值,为什么在文 本框中不显示值
代码如下:
package com.zhyx.swing;
public class TestCalculator extends JFrame { /**
* TestCalculator初始化方法
*/
public TextField t1;
public TestCalculator() {
setLayout(new BorderLayout());
JPanel p1=new JPanel();
t1=new TextField();
JPanel p2=new JPanel();
p2.setLayout(new GridLayout(4,4));
String []text={"7","8","9","/","4","5","6","*","1","2","3","-","0","+/-",".","+","="};
Button btn[] = new Button[17];
int i;
for(i=0;i<btn.length;i++){
btn[i]=new Button(text[i]);
p2.add(btn[i]);
btn[i].addActionListener(new Listener());
}
btn[0].setSize(20,30);
p1.setSize(300,10);
p1.setBackground(Color.gray);
p2.setSize(500,30);
t1.setBackground(Color.RED);
t1.setText("0.");
add(p1,BorderLayout.NORTH);
add(t1,BorderLayout.CENTER);
add(p2,BorderLayout.SOUTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);
} /**
* @param args
*/
public static void main(String[] args) {
TestCalculator test=new TestCalculator();
}} class Listener implements ActionListener{
public Listener(){
}
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
TextField t1=new TextField();
if(obj instanceof Button){
//如果按钮里的String内容为int型,则返回到text上
try{
int a=Integer.parseInt(((Button) obj).getLabel());
t1.setText(""+a);
t1.getText();
if(".".equals(((Button) obj).getLabel())){
t1.setText(""+a);
t1.getText();
}
}catch(Exception e1){
System.out.println("ddd");
}
}
//每一次点击完按钮后Text上的内容要清空
// t1.setText("");
}
}
望指教
有一些Button,我点击一个数字Button就将它上面的值传入到文本框中,我通过tx.getText()得到了此值,为什么在文 本框中不显示值
代码如下:
package com.zhyx.swing;
public class TestCalculator extends JFrame { /**
* TestCalculator初始化方法
*/
public TextField t1;
public TestCalculator() {
setLayout(new BorderLayout());
JPanel p1=new JPanel();
t1=new TextField();
JPanel p2=new JPanel();
p2.setLayout(new GridLayout(4,4));
String []text={"7","8","9","/","4","5","6","*","1","2","3","-","0","+/-",".","+","="};
Button btn[] = new Button[17];
int i;
for(i=0;i<btn.length;i++){
btn[i]=new Button(text[i]);
p2.add(btn[i]);
btn[i].addActionListener(new Listener());
}
btn[0].setSize(20,30);
p1.setSize(300,10);
p1.setBackground(Color.gray);
p2.setSize(500,30);
t1.setBackground(Color.RED);
t1.setText("0.");
add(p1,BorderLayout.NORTH);
add(t1,BorderLayout.CENTER);
add(p2,BorderLayout.SOUTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);
} /**
* @param args
*/
public static void main(String[] args) {
TestCalculator test=new TestCalculator();
}} class Listener implements ActionListener{
public Listener(){
}
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
TextField t1=new TextField();
if(obj instanceof Button){
//如果按钮里的String内容为int型,则返回到text上
try{
int a=Integer.parseInt(((Button) obj).getLabel());
t1.setText(""+a);
t1.getText();
if(".".equals(((Button) obj).getLabel())){
t1.setText(""+a);
t1.getText();
}
}catch(Exception e1){
System.out.println("ddd");
}
}
//每一次点击完按钮后Text上的内容要清空
// t1.setText("");
}
}
望指教
TextField t1=new TextField();你又new了个新的 TextField
当然旧的t1里不会有值
Object obj = e.getSource();
t1=new TextField();
if(obj instanceof Button){
//如果按钮里的String内容为int型,则返回到text上
try{
int a=Integer.parseInt(((Button) obj).getLabel());
t1.setText(""+a);
t1.getText();
if(".".equals(((Button) obj).getLabel())){
t1.setText(""+a);
t1.getText();
}
}catch(Exception e1){
System.out.println("ddd");
}
}
//每一次点击完按钮后Text上的内容要清空
// t1.setText("");
}
}
给你贴一个可以跑的import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;public class TestCalculator extends JFrame { /**
* TestCalculator初始化方法
*/
private TextField t1; public TestCalculator() {
setLayout(new BorderLayout());
JPanel p1=new JPanel();
t1=new TextField();
JPanel p2=new JPanel();
p2.setLayout(new GridLayout(4,4));
String []text={"7","8","9","/","4","5","6","*","1","2","3","-","0","+/-",".","+","="};
Button btn[] = new Button[17];
int i;
for(i=0;i<btn.length;i++){
btn[i]=new Button(text[i]);
p2.add(btn[i]);
btn[i].addActionListener(new Listener());
}
btn[0].setSize(20,30);
p1.setSize(300,10);
p1.setBackground(Color.gray);
p2.setSize(500,30);
t1.setBackground(Color.RED);
t1.setText("0.");
add(p1,BorderLayout.NORTH);
add(t1,BorderLayout.CENTER);
add(p2,BorderLayout.SOUTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);
} /**
* @param args
*/
public static void main(String[] args) {
TestCalculator test=new TestCalculator();
} class Listener implements ActionListener{
// private TextField t=null;
public Listener(){
// t=t1;
}
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
// TextField t1=new TextField();
if(obj instanceof Button){
//如果按钮里的String内容为int型,则返回到text上
try{
int a=Integer.parseInt(((Button) obj).getLabel());
t1.setText(""+a);
t1.getText();
if(".".equals(((Button) obj).getLabel())){
t1.setText(""+a);
t1.getText();
}
}catch(Exception e1){
System.out.println("ddd");
}
}
//每一次点击完按钮后Text上的内容要清空
// t1.setText("");
} }}
你主界面的TextField跟监听用的TextField是两个东西,所以主界面的TextField没有变
给你贴一个可以跑的
感谢你回答问题,我觉得回答问题你应该把修改的地方标注出来,这样我查阅上就方便些
看了你的代码后,你把监听类变成了界面类的子类,这是一种方法,但是我现在就想监听类外部调用界面类的变量,呵呵,不好意思了
第一,代码修改的地方比较多的时候,就无法给你标注,CSDN遇到这种情况太多。
既然你诚心在CSDN提问,那么就不会懒到让别人给你把一切弄好,从学习的角度,你自己找别人代码跟 你代码的差别在那里其实是好事,对程序理解会更深。
第二,使用内部类监听是最为方便的方法,如果要在外部调用监听,那么就额外需要传递你要监听的对象。给你贴出来看看这样实现的代码import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class TestCalculator2 extends JFrame { public TextField getT1() { // modified
return t1;
} /**
* TestCalculator初始化方法
*/
private TextField t1; public TestCalculator2() {
setLayout(new BorderLayout());
JPanel p1=new JPanel();
t1=new TextField();
JPanel p2=new JPanel();
p2.setLayout(new GridLayout(4,4));
String []text={"7","8","9","/","4","5","6","*","1","2","3","-","0","+/-",".","+","="};
Button btn[] = new Button[17];
int i;
for(i=0;i<btn.length;i++){
btn[i]=new Button(text[i]);
p2.add(btn[i]);
btn[i].addActionListener(new Listener(this)); // modified
}
btn[0].setSize(20,30);
p1.setSize(300,10);
p1.setBackground(Color.gray);
p2.setSize(500,30);
t1.setBackground(Color.RED);
t1.setText("0.");
add(p1,BorderLayout.NORTH);
add(t1,BorderLayout.CENTER);
add(p2,BorderLayout.SOUTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);
} /**
* @param args
*/
public static void main(String[] args) {
TestCalculator2 test=new TestCalculator2();
}} class Listener implements ActionListener{
private TextField t1=null; // modified
public Listener(TestCalculator2 cal){ // modified
t1=cal.getT1();
}
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
// TextField t1=new TextField();
if(obj instanceof Button){
//如果按钮里的String内容为int型,则返回到text上
try{
int a=Integer.parseInt(((Button) obj).getLabel());
t1.setText(""+a);
t1.getText();
if(".".equals(((Button) obj).getLabel())){
t1.setText(""+a);
t1.getText();
}
}catch(Exception e1){
System.out.println("ddd");
}
}
//每一次点击完按钮后Text上的内容要清空
// t1.setText("");
} }