2016-05-11 10 views
0

ボタンを使用してtextfield1から入力した後、Textarea1の値を保持したい。私がそれを実行するたびに、値は新しいもののために消えます。私が初めてそれを行うとき、私は挿入した名前の価値を得るが、私はそれを消すときに2回目を行う。ありがとう、ありがとう。Textareaの値をテキストフィールドから永久に保持したい(Java GUI)

import javax.swing.UIManager.LookAndFeelInfo; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseWheelEvent; 
import java.awt.event.MouseWheelListener; 
import javax.swing.border.Border; 
import javax.swing.*; 


public class GUI_project2 extends JFrame { 

private JMenuBar menuBar; 
private JButton button1; 
private JTextArea textarea1; 
private JTextField textfield1; 

static String MYARRAY[] = new String[4]; 
static int COUNTER = 0; 
static String NEWITEM = null; 
//Constructor 
public GUI_project2(){ 

    this.setTitle("GUI_project2"); 
    this.setSize(1118,845); 
    //menu generate method 
    generateMenu(); 
    this.setJMenuBar(menuBar); 

    //pane with null layout 
    JPanel contentPane = new JPanel(null); 
    contentPane.setPreferredSize(new Dimension(1118,845)); 
    contentPane.setBackground(new Color(192,192,192)); 


    button1 = new JButton(); 
    button1.setBounds(206,109,90,35); 
    button1.setBackground(new Color(214,217,223)); 
    button1.setForeground(new Color(0,0,0)); 
    button1.setEnabled(true); 
    button1.setFont(new Font("sansserif",0,12)); 
    button1.setText("Add Word"); 
    button1.setVisible(true); 
    //Set methods for mouse events 
    //Call defined methods 
    button1.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent evt) { 
      ButtonClicked(evt); 
     } 
    }); 


    textfield1 = new JTextField(); 
    textfield1.setBounds(203,46,90,35); 
    textfield1.setBackground(new Color(255,255,255)); 
    textfield1.setForeground(new Color(0,0,0)); 
    textfield1.setEnabled(true); 
    textfield1.setFont(new Font("sansserif",0,12)); 
    textfield1.setText(""); 
    textfield1.setVisible(true); 


    textarea1 = new JTextArea(); 
    textarea1.setBounds(27,48,150,100); 
    textarea1.setBackground(new Color(255,255,255)); 
    textarea1.setForeground(new Color(0,0,0)); 
    textarea1.setEnabled(true); 
    textarea1.setFont(new Font("sansserif",0,12)); 
    textarea1.setText(""); 
    textarea1.setBorder(BorderFactory.createBevelBorder(1)); 
    textarea1.setVisible(true); 

    //adding components to contentPane panel 
    contentPane.add(button1); 
    contentPane.add(textfield1); 
    contentPane.add(textarea1); 
    //adding panel to JFrame and seting of window position and close operation 
    this.add(contentPane); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setLocationRelativeTo(null); 
    this.pack(); 
    this.setVisible(true); 
} 

//Method mouseClicked for button1 
private void ButtonClicked (MouseEvent evt) { 
     //TODO 
     NEWITEM = textfield1.getText(); 
     if (NEWITEM.compareTo("end")!=0){ 
      MYARRAY[COUNTER] = NEWITEM; 
      COUNTER++; 
      if (COUNTER == MYARRAY.length){ 
       increaseArraySize(); 
      } 
     } 
     String NEWITEM = ""; 
     listArray(); 
} 
public void listArray(){ 
     for (int X=0;X<MYARRAY.length;X++){ 
      textarea1.setText(textfield1.getText()); 
     } 

} 

public static void increaseArraySize(){ 
     System.out.print("Here we increase the size to "); 
     String TEMP[] = new String[MYARRAY.length*2]; 
     System.arraycopy(MYARRAY, 0, TEMP, 0, MYARRAY.length); 
     MYARRAY = TEMP; 
     System.out.println(TEMP.length); 

} 
//method for generate menu 
public void generateMenu(){ 
    menuBar = new JMenuBar(); 

    JMenu file = new JMenu("File"); 
    JMenu tools = new JMenu("Tools"); 
    JMenu help = new JMenu("Help"); 

    JMenuItem open = new JMenuItem("Open "); 
    JMenuItem save = new JMenuItem("Save "); 
    JMenuItem exit = new JMenuItem("Exit "); 
    JMenuItem preferences = new JMenuItem("Preferences "); 
    JMenuItem about = new JMenuItem("About "); 


    file.add(open); 
    file.add(save); 
    file.addSeparator(); 
    file.add(exit); 
    tools.add(preferences); 
    help.add(about); 

    menuBar.add(file); 
    menuBar.add(tools); 
    menuBar.add(help); 
} 



public static void main(String[] args){ 
    System.setProperty("swing.defaultlaf", "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      new GUI_project2(); 
     } 
    }); 
} 

}

答えて

0

こんにちはCSStudent私は可能な限りあなたのコードのように近くに滞在しようとしましたが、あなたが目指しているものを達成するために、あなたのlistArray方法を編集しました。

ボタンを介してtextfield1から入力した後、Textarea1の値を保持したいと考えています。私がそれを実行するたびに、値は新しいもののために消えます。私が初めてそれを行うとき、私は挿入した名前の価値を得るが、私はそれを消すときに2回目を行う。ありがとう、ありがとう。コードは次のとおりです。

あなたの現在のコードは、テキストエリアのテキストを「設定」しています。ドキュメントのsetTextによると

は、この処理を行います。

は、指定したテキストにこのTextComponentのテキストを設定します。テキストがヌルまたは空の場合、単に古いテキストを削除するという効果があります。テキストが挿入されると、結果のキャレットの位置はキャレットクラスの実装によって決定されます。

したがって、あなたのlistArrayメソッドを見てみましょう。

public void listArray(){ 
    for (int X=0;X<MYARRAY.length;X++){ 
     textarea1.setText(textfield1.getText()); 
    } 
} 

サイズが4から始まり、必要に応じて* 2増加する文字列配列をループします。問題は、配列のサイズが4で、文字列を位置0に追加すると、配列が次のように見えるということです。値が「0」の場合、ドキュメントの引用符に基づいて配列が{"最初に挿入する"、null、null、null} nullまたは空の場合は、単に古いテキストを削除します。これがあなたが言うように消去する理由です。あなたはslightyそれを修正する場合は前述したように

しかし、あなたは

public void listArray(){ 
    textarea1.setText(""); 
    for (int X=0;X<MYARRAY.length;X++){ 
     if(MYARRAY[X] != null) 
      textarea1.append(MYARRAY[X]+"\n"); 
    } 
} 

望むものを達成します私は私はこれがaswell何をするか説明させて、可能な限りあなたのコードに近い滞在してみました。 まず最初に、空の文字列である ""を挿入してテキストエリアをクリアします。それに続いて、あなたのArrayをループし、NOT(!=)の場合のみ、保存されたStringと改行( " n ")。この回答はあなたの問題を解決した場合は受け入れたとして、私の答えをマークすることを確認してください。これにより、緑

1

私はそれを行う初めて私はそれを行うとき、私は挿入名前の値は、しかし、二度目はそれが

を消去し得る:ここでは、コードです

setText(..)メソッドは何をしていますか?メソッドの説明については、APIを読んだことがありますか?

textarea1.setText(textfield1.getText()); 

する必要があります:あなたはAPIを読んでいない場合は、プログラムすることはできません

textarea1.append(textfield1.getText()); 

! JTextArea APIを読んで、将来役立つ可能性のある他のメソッドを見てみましょう。

+0

に中空からそれを切り替えるには答えの横にチェックマークをクリックしてください

(このチェックは、消去されたばかりのテキストエリアを防ぎます)これは、テキストフィールドに入力するたびに値を保持するようになります。私は3 *値を入力します。 – CSStudent

+0

@CSStudent、問題のいくつかの基本的なデバッグを行います。あなたの問題を解決するために他の人に頼ってはいけません! **テキストを3回追加しないでください。**これを行う理由を調べて、コードを修正してください! – camickr

+0

私は、プログラミングの初心者です。 – CSStudent

1

textarea1.setText(someText)と呼ぶたびに、あなたが来て、以前にあったテキストを置き換える新しいテキストコンテンツをテキストエリアに設定しています。あなたは何をすべき は次のとおりです。

final StringBuilder content = new StringBuilder(); 
for (int X=0;X<MYARRAY.length;X++){ 
    sb.append(MYARRAY[X]); 
    //Add this line if you eventually want to add a new line 
    sb.append("\r\n"); 
} 
textarea1.setText(sb.toString()); 
関連する問題