为什么我不能在编码的其余部分使用构造函数变量?

时间:2013-02-23 06:22:39

标签: java constructor jtextpane

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextPane;

public class Log extends JFrame {
    private static final long serialVersionUID = 1L;

    String logx = "LOG: ";
    JTextPane txt = new JTextPane();
    JPanel p = new JPanel();
    String addTo;

    public Log() {
        super("LOG");
        setSize(720, 600);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        p.add(txt);
        add(p);
        txt.setText(logx);
    }

    public Log(String a) {
        addTo = a;
        txt.setText(addTo);

    }
}

这是我的“Log”类的编码, 我的想法是来自我的主类的字符串将显示在JTextPane中。

我是java的新手,所以我知道使用构造函数可能不是最好的方法。

为什么我的构造函数中的String a无法添加到我的JTextPane?

如果我没有提供足够的信息,请告诉我,我尽量保持简单。

2 个答案:

答案 0 :(得分:2)

当您创建Log类的新实例并将其传递给String(在本例中为“a”)时,它将运行public Log(String a) {中的代码并且不会运行public Log() {部分。您有两个不同的构造函数,但根据您在创建类时传递的内容,将只调用其中一个构造函数。现在,您正在尝试设置JTextPane的文本,但您尚未设置屏幕(从未调用public Log() {)。要解决此问题,请尝试更改

public Log(String a) {
    addTo = a;
    txt.setText(addTo);

}

public Log(String a) {
    super("LOG");
    setSize(720, 600);
    setResizable(false);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    p.add(txt);
    add(p);
    addTo = a;
    txt.setText(addTo);

}

答案 1 :(得分:1)

你的第一个构造函数是否已经有效?如果是这样,请尝试:

public Log(String a) {
    super("LOG");
    setSize(720, 600);
    setResizable(false);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    p.add(txt);
    add(p);
    addTo = a;
    txt.setText(addTo);

}

看来重载的构造函数缺少一些东西。