如何使用新值重置或刷新 Jframe
How to reset or refresh Jframe with new values
我有一个 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");
}
}
要获得更明确的答案,post 和 MCVE
鉴于您没有 post 编辑任何代码,我猜您正在使用 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
的使用,因为它脱离了 OOP 的要点。
我有一个 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");
}
}
要获得更明确的答案,post 和 MCVE
鉴于您没有 post 编辑任何代码,我猜您正在使用 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
的使用,因为它脱离了 OOP 的要点。