2016-03-23 4 views
2

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

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

Вы помещаете содержимое массива в JLabel, а затем добавляете его в область содержимого фрейма? Если да, удаляете ли вы старый ярлык перед добавлением нового? – Yulek

+0

Не могли бы вы добавить сегмент кода, чтобы мы могли видеть, где вы поступили неправильно? –

+1

Просто загрузите код. Затем я помещаю их в контейнер, а затем в область содержимого. –

ответ

1

Для более определенного ответа, опубликовать MCVE

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

Если у вас есть JLabel или JTextArea, это может быть так.

labelOrTextArea.setText("New Text"); 

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

dlm.addElement("New Text"); 

UPDATE

Я вижу пару вещей неправильно с вашим кодом. Прежде всего, 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 или такие.

Результат:

Three TextAreas

В довершение всего этого, вы не должны полагаться на использование static, как это происходит вдали от основных точек объектно-ориентированного программирования.

+0

WOW благодарит кучу Отличное понимание и советы .. Im новое для изучения Java, так жаль о очевидных путаницах, но снова спасибо! –

+0

Один вопрос: если бы я должен был реализовать код, как вы описали, будет ли обновление JFrame автоматически, если пользователь вводит новую строку для хранения в массиве? –

+0

Что именно вы имеете в виду? Вы пытаетесь получить содержимое из текстовых областей и сохранить это в массиве? – Jonah