Reputation: 3
I want to keep the values of Textarea1 after inputting them through the textfield1 via a button. Everytime I finish running it the value disappears for a new one. The first time I do it I get the value of the name I inserted, however when i do it a second time it erases. please help me, thanks. Here is the code:
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();
}
});
}
}
Upvotes: 0
Views: 1128
Reputation: 186
Hello CSStudent I tried to stay as close as your code as possible and edited your listArray method in order to achieve what you are Aiming for.
I want to keep the values of Textarea1 after inputting them through the textfield1 via a button. Everytime I finish running it the value disappears for a new one. The first time I do it I get the value of the name I inserted, however when i do it a second time it erases. please help me, thanks. Here is the code:
What your current code does is 'SETTING' the text of your textarea.
According to the Docs setText does this:
Sets the text of this TextComponent to the specified text. If the text is null or empty, has the effect of simply deleting the old text. When text has been inserted, the resulting caret location is determined by the implementation of the caret class.
So lets take a look at your listArray method.
public void listArray(){
for (int X=0;X<MYARRAY.length;X++){
textarea1.setText(textfield1.getText());
}
}
It loops through your String Array which starts at the Size of 4 and increases by *2 if required. The problem is that since the size of the Array is 4 and you add the String on position 0 the array looks like this {"First thing you insert",null,null,null} according to the quote from the docs if the value is null or empty it will simply delete the old text. This is why it erases as you say.
However if you slighty modify it you will achieve what you desire
public void listArray(){
textarea1.setText("");
for (int X=0;X<MYARRAY.length;X++){
if(MYARRAY[X] != null)
textarea1.append(MYARRAY[X]+"\n");
}
}
As stated earlier I tried to stay as close to your code as possible, let me explain what this does aswell. First of all it clears the textarea by inserting "" which is a blank String, followed by that it will loop through your Array and only IF it IS NOT (!=) null it will append the saved String and a linebreak ("\n"). (This check prevents the textarea from getting erased)
If this reply solved your Problem please make sure to mark my answer as accepted, click on the check mark beside the answer to toggle it from hollow to green
Upvotes: 0
Reputation: 1113
Every time you call textarea1.setText(someText)
, you are setting a fresh new content on the textarea that comes and replaces any other text that was here before.
What you should do is:
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());
Upvotes: 1
Reputation: 324137
The first time I do it I get the value of the name I inserted, however when i do it a second time it erases
What do you think the setText(..)
method does? Did you read the API for a description of the method?
textarea1.setText(textfield1.getText());
should be:
textarea1.append(textfield1.getText());
You can't program if you don't read the API! Take the time now to read the JTextArea API for other methods you may find useful in the future.
Upvotes: 1