2015-03-14 2 views
2

Я создал простую программу на Java, которая содержит только одну текстовую область и кнопку. Кнопка должна добавить «текст». Однако это не работает для меня.Невозможно добавить текст в JTextArea в Java из другой функции

На боковой ноте: Я стараюсь как можно короче выполнять свои функции. (Я не хочу функцию с слишком много строки кодов)

Во-первых, я создаю фрейму

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; 
} 

Когда я нажимаю на кнопку, она не d o что угодно. Я просто хочу добавить текст в JTextArea. Я что-то забыл?

+0

Как насчет того, чтобы вы не использовали статические. Статический не является механизмом связи между объектами. Вместо этого укажите модель или ссылку на объекты, которые вам нужно обновить до других классов. – MadProgrammer

ответ

1

textArea() возвращает новый JTextArea каждый раз, когда он вызывается. Поэтому ваша функция buttonAddText() вызывает textArea() и добавляет текст во вновь созданную текстовую область, которая не содержится в панели прокрутки.

Вам необходимо передать ссылку текстовой области на функции textScrollPane() и buttonAddText().

Что-то, как это будет работать:

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

Изменение textScrollPane() и buttonAddText(), так что они принимают параметр JTextArea и не требуют TEXTAREA() в этих функциях больше для создания новых текстовых областей. Вместо этого используйте объект JTextArea, который передается в функции.

+0

Я сделал то, что вы сказали, а затем добавил «final JTextArea» для моей кнопки buttonAddText(), и она работает! Большое спасибо. –

+0

Хорошо, никаких проблем! –

Смежные вопросы