java swing中TextArea显示不出数据

public class Canview extends JFrame {

private String logresult;//这个是需要显示出来的数据变量
.
.
.
JButton button = new JButton("开始");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
logresult="结果显示成功"; //这里给logresult赋值
}
}
TextArea textArea = new TextArea(); //实例化TextArea对象
textArea.setText(logresult);//!!!结果中文本域没有显示出结果!!!
//补充有字数限制,代码大概就这个意思

public class Canview extends JFrame {

private String logresult;

public Canview() {

JButton button = new JButton("开始");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

logresult="输出的结果"
});
}

//文本域
TextArea textArea = new TextArea();
textArea.setBackground(SystemColor.control);

textArea.setText(logresult);
System.out.println(logresult);//null

}
}

1请问你有没有吧你的textArea 添加到JFrame 里面呢?

2 如果代码的逻辑没问题的话,最好是能打个断点调试一下这一行textArea.setText(logresult);,看下数据放进去了吗?


一般呢是先把JTextArea 添加到contentPane然后再把contentPane添加到Jframe里面,


contentPane = new JPanel();

contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

setContentPane(contentPane);

contentPane.setLayout(null);


JTextArea textArea = new JTextArea();

textArea.setBounds(90, 55, 225, 71);

textArea.setText(logresult);//

contentPane.add(textArea);



给你一段代码参考一下

import java.awt.Container;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JScrollPane;
//import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTextArea;

public class MainThread extends JFrame {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private JPanel contentPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainThread frame = new MainThread();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
 * Create the frame.
 */
public MainThread() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

JButton button = new JButton("\u5F00\u59CB");
button.setBounds(51, 182, 93, 23);
contentPane.add(button);

JButton button_1 = new JButton("\u505C\u6B62");
button_1.setBounds(278, 182, 93, 23);
contentPane.add(button_1);

JTextArea textArea = new JTextArea();
textArea.setBounds(90, 55, 225, 71);
contentPane.add(textArea);






}
}

追问

断点出来的是空指针,应该是值没进去

追答

logresult 为空吗?

追问

TextArea textArea = new TextArea();
textArea.setBackground(SystemColor.control);

textArea.setText(logresult);
System.out.println(logresult);
//输出为null

但是在button监听里面logresult是有效的

追答

我大概明白你的意思了,你这个是变量作用域的问题

你应该把
TextArea textArea

定义成全局变量

public class Canview extends JFrame {

private String logresult;//这个是需要显示出来的数据变量

private TextArea textArea;//全局变量

在显示的时候 实例化textArea
textArea = new TextArea(); //实例化TextArea对象

然后再在
监听方法里面写
public void actionPerformed(ActionEvent e) {
logresult="结果显示成功"; //这里给logresult赋值
//赋值到textArea
textArea.setText(logresult);
}

追问

多谢!出来了!

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-22
textArea.setText(logresult);

这个设置要写在button的按钮点击事件里面,每次设置都是不同的

追问

这个写在button 的监听里会报错,因为textarea不是全局变量

追答

加final修饰即可

追问

我在settext那里设了断点,是空指针,值没传出来

追答final TextArea textArea = new TextArea();
JButton button = new JButton("开始");
button.addActionListener( new ActionListener() {
    public void actionPerformed ( ActionEvent e ) {
        textArea.setText("结果显示成功");
    }
}

第2个回答  2014-12-22
你把textArea add到Canview 里面去了么?追问

我的提问最后少了个},textArea在jf中

追答

你把完整代码贴出来。。

相似回答