代码之家  ›  专栏  ›  技术社区  ›  Lord Rixuel

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

  •  2
  • Lord Rixuel  · 技术社区  · 9 年前

    我用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 回复  |  直到 9 年前
        1
  •  1
  •   Dermot Blair    9 年前

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

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

    这样的方法会奏效:

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

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