Как сбросить или обновить Jframe новыми значениями

У меня есть Jframe, что пользователь вводит новую информацию через Joptionpane, она добавляется в массив, который затем добавляется и отображается в области содержимого... цикл затем повторяется, пока пользователь не введет "STOP". В настоящее время программа выводит новый массив под старым. Как удалить старый массив в области содержимого и отображать только новые значения?

import java.awt.*;
import java.util.LinkedList;
import java.util.List;
public class Project1GUI {
    static JFrame Frame;
    static TextArea unsorted_words, sorted_words, linked_words;
    public Project1GUI(String title){
            //All this does is make an empty GUI FRAME. 
                    Frame=new JFrame();//i made a new variable from the JFrame class
                    Frame.setSize(400,400);//Used the Variable from JFrame and used some of it functions. This function sets the hieght and width of the Frame
                    Frame.setLocation(200,200);//This sets where the Empty Frame should be
                    Frame.setTitle(title);//This puts a title up top of the Frame
                    Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//places an x box that closes when clicked on
                    Frame.setVisible(true);//This activates the JFram when is set true.
                    Frame.setLayout(new GridLayout(1,2));//This sets the layout of the Frame and since i want a Grid i used a GirdLayout
                    //Functions and placed it inside the setlayout functions. to  get 2 grids i places 1 meaning 1 row and 2 for 2 cols
                    unsorted_words=new TextArea(); //From the TextArea class i made three variables
                    sorted_words= new TextArea();
                    linked_words= new TextArea();
                    Container panel=new Container();
                    panel=Frame.getContentPane();
                    panel.add(unsorted_words);
                    panel.add(sorted_words);
                    panel.add(linked_words);

    }


    public void add_unsorted(String words){
        unsorted_words.append(words+"\n");//add words to GUI

    }

    public void add_sorted(String words){
        sorted_words.append(words+"\n");
    }

    public void add_linked(List<String> linked_words2){
        linked_words.append(linked_words2+"\n");
    }

}

1 ответ

Решение

Для более точного ответа, отправьте MCVE

Поскольку вы не разместили ни одного кода, я предполагаю, что вы используете JLabel илиJListили что-то в этом роде для отображения массива. Независимо от того, что вы делаете, вы должны указать компоненту обновить его содержимое, он не просто делает это сам. Для этого нужно вызвать компоненты.setText()или похожий метод.

Если у тебя естьJLabelили жеJTextAreaэто может выглядеть так

labelOrTextArea.setText("New Text");

Если вы используетеJListвы должны обновить спискиDefault List Model как это

dlm.addElement("New Text");

ОБНОВИТЬ

Я вижу пару вещей не так с вашим кодом. Прежде всего JFrame Frame = new JFrame условно переменные должны начинаться со строчной буквы и не должны содержать подчеркивания '_'. Вы также используете компоненты AWT вместо компонентов Swing. Вы должны использовать подобные JTextArea, JPanel (Нет никаких JContainer), JLabel и т.п.

Вы также никогда не добавляете панель в рамку.

frame.add(panel);

Вы также не должны добавлять материал в рамку или панели после того, как вы установили его видимость в true. Таким образом, вы должны настроить свой кадр следующим образом

import javax.swing.*;
import java.awt.*;
import java.util.List;
public class Project1GUI
{
    JTextArea unsorted_words, sorted_words, linked_words;

    public Project1GUI()
    {
        JFrame frame = new JFrame("Title");
        JPanel panel = new JPanel(new GridLayout(2, 1));

        unsorted_words = new JTextArea();
        sorted_words = new JTextArea();
        linked_words = new JTextArea();

        panel.add(unsorted_words);
        panel.add(sorted_words);
        panel.add(linked_words);

        frame.add(panel);
        frame.setSize(400,400);
        frame.setLocation(200,200);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

Затем вы можете реализовать методы, которые у вас есть на данный момент, и вызывать их в ActionListener или что-то в этом роде.

Результат:

Три текстовых участка

Кроме того, вы не должны полагаться на использование static как это отнимает от основных моментов ООП.

Другие вопросы по тегам