制作可以从另一个班级

时间:2015-10-12 17:05:59

标签: java swing jframe jpanel jtextarea

我正在尝试使用我的程序的输出文本区域UI元素来打印我的程序的进度和更新,而不是使用Eclipse内部的控制台输出。我可以这样说:

System.out.println(string);

但不是打印到控制台,而是在UI上打印到我自己的文本区域。我的代码看起来像这样(我已经删除了我的其他面板元素以更多地关注这一点):

这是我的MainPanel类,我在其中创建要打印的元素:

public class MainPanel extends JPanel{

    private JTextArea consoleOutput;
    private JButton submitButton;       

    public MainPanel(){

        setLayout(null);
        Border border = BorderFactory.createLineBorder(Color.LIGHT_GRAY);
        Font f1 = new Font("Arial", Font.PLAIN, 14);

        consoleOutput = new JTextArea();
        consoleOutput.setBounds(199, 122, 375 , 210);
        consoleOutput.setBorder(BorderFactory.createCompoundBorder(border, BorderFactory.createEmptyBorder(3, 4, 0, 0)));
        consoleOutput.setEditable(false);
        consoleOutput.setFont(f1);

        submitButton = new JButton("Get Cards");
        submitButton.setBounds(35, 285, 107, 49);
        submitButton.setFont(f2);

        submitButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
            String username = "HenryJeff";
            String password = "Password";
            Cards cards = new Cards();
            cards.openTabs(username,password);
            }
        });
        add(consoleOutput);
        add(submitButton);
        }   
}

这是我的Cards课程:

public class Cards{

    public void openTabs(String username, String password){
         System.out.println(username + ", " + password);
    }

如何将System.out.println();替换为打印到文本区域?我已经尝试让我的Cards类扩展我的JPanel并在那里创建和创建控制台文本区域,然后添加写入文本区域的写入方法,但它没有工作。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

MainPanel班级

cards.openTabs(username,password,this);

并指定您的consoleOutput为非private默认值。

更改您的Cards课程

public class Cards{

public void openTabs(String username, String password, MainPanel panel){
panel.consoleOutput.setText(username + ", " + password);
//now both user name and password will be displayed in text area of MainPanel class.
}

答案 1 :(得分:1)

您可以通过在DocumentJTextArea的{​​{1}}之间创建一座桥梁来实现这一目标:

Writer

然后:

public class PlainDocumentWriter extends PlainDocument implements Writer {
    public Writer append(char c) {
        // Note: is thread-safe. can share between threads.
        insertString(getLength(), Char.toString(c), new SimpleAttributeSet());
    }

    public Writer append(CharSequence csq) {
        insertString(getLength(), csq.toString(), new SimpleAttributeSet());
    }

    // etc.
}

然后:

PlainDocumentWriter w = new PlainDocumentWriter();
consoleOutput = new JTextArea(w);
PrintWriter pw = new PrintWriter(w);

现在,您写入pw.println(username + ", " + password); 的任何内容都会显示在文本区域中。