无法从另一个函数向Java中的JTextArea添加文本

时间:2015-03-14 00:21:25

标签: java function static actionlistener jtextarea

我在Java中创建了一个只包含一个文本区域和一个按钮的简单程序。该按钮用于添加"文本"。但是,它对我没用。

旁注:我试图让我的功能尽可能短。 (我不想要一个包含太多代码的函数)

首先,我创建了JFrame

private static void createFrame()
{
    //Build JFrame
    JFrame frame = new JFrame("Text Frame");
    frame.setLayout(null);
    frame.setSize(500,400);

    Container contentPane = frame.getContentPane();
    contentPane.add(textScrollPane());
    contentPane.add(buttonAddText());

    //Set Frame Visible
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

然后是TextArea和Scrollpane(用于添加滚动条)

private static JTextArea textArea()
{
    JTextArea output = new JTextArea();
    output.setLineWrap(true); // Text return to line, so no horizontal scrollbar
    output.setForeground(Color.BLACK);
    output.setBackground(Color.WHITE);

    return output;
}

private static JScrollPane textScrollPane()
{
    JScrollPane scrollPane2 = new JScrollPane(textArea());
    scrollPane2.setBounds(0, 0, 490, 250);

    return scrollPane2;
}

最后,按钮

private static JButton buttonAddText()
{
    JButton testbutton = new JButton("TEST");
    testbutton.setBounds(20, 280, 138, 36);

    testbutton.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e)
        {
            //action listener here
            textArea().insert("TEXT",0);
            System.out.println("Button Tested!");
        }
    });

    return testbutton;
}

当我点击按钮时,它没有做任何事情。 我只想在JTextArea中添加一个文本。我忘了什么吗?

1 个答案:

答案 0 :(得分:1)

每次调用textArea()时都会返回一个新的JTextArea。因此,buttonAddText()函数调用textArea()并将文本添加到滚动窗格中未包含的新创建的文本区域。

您需要将文本区域的引用传递给textScrollPane()和buttonAddText()函数。

这样的事情会起作用:

JTextArea jta = textArea();
contentPane.add(textScrollPane(jta));
contentPane.add(buttonAddText(jta));

更改textScrollPane()和buttonAddText(),以便它们接受JTextArea参数,并且不再在这些函数中调用textArea()来创建新的文本区域。而是使用传递给函数的JTextArea对象。