2017-12-23 6 views
1

ReminderGUIのオブジェクトはJTextAreaのフィールドを持っています。 ReminderGUIは、リマインダーを保存して表示できるアプリを表します。 getReminderButtonをクリックすると、この日に以前に保存されたリマインダーを見つけてJTextAreaに表示する(この機能はコードスニペットに表示されません)。`JTextArea`インスタンスフィールドを使用して` JTextArea`コンテンツを変更するには?

JTextAreaのテキストを変更する際に問題が発生しています。そのコードは以下のとおりです。 getReminderButtonをクリックすると、getReminderButtonHandler()は新しい空白JTextAreaを初期化し、それをsome new text hereに追加することになっています。なぜこれは機能しませんか?

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class ReminderGUI extends JFrame implements ActionListener{ 

    private JButton getReminderButton; 
    private JTextArea reminderTextArea; 

    public ReminderGUI() { 
     super(); 
     super.setLayout(new BorderLayout()); 
     this.reminderTextArea = new JTextArea("Enter text"); 
     this.getReminderButton = new JButton("Get reminder"); 

     JPanel southPanel = new JPanel(); 

     southPanel.add(getReminderButton, BorderLayout.SOUTH); 

     super.add(southPanel, BorderLayout.SOUTH); 
     super.add(reminderTextArea, BorderLayout.CENTER); 

     this.getReminderButton.addActionListener(this); 
    } 

    public void actionPerformed(ActionEvent e) { 
     if(e.getSource() == this.getReminderButton) { 
      this.getReminderButtonHandler(); 
     } 
    } 

    private void getReminderButtonHandler() { 
     this.reminderTextArea = new JTextArea(""); 
     this.reminderTextArea.append("some new text here"); 
    } 

    public static void main(String[] args) { 
     ReminderGUI rmg = new ReminderGUI(); 
     rmg.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     rmg.setSize(500, 300); 
     rmg.setVisible(true); 
    } 
} 
+0

@Nehoraiこれは、問題を解決しますが、なぜ私の方法は間違っていた? – Yos

+0

メソッドに新しい*** JTextAreaを作成していますが、なぜ機能するのですか?この新しいJTextAreaのテキストを設定すると、表示されたJTextAreaのテキストが魔法のように変更されるのはなぜですか?これは、Javaオブジェクトの仕組みに関する基本的な誤解を示唆しています。 –

+0

@HovercraftFullOfEelsですが、私はそれを既存のフィールドに設定しています。何らかの 'repaint()'メソッドを使用する必要がありますか? – Yos

答えて

2

問題は、この行である:this.reminderTextArea = new JTextArea("Enter text");あなたはこのように、set方法を使用して設定することができる新しいTextAreaの

を作成している:reminderTextArea.setText(text);

関連する問題