当我在搜索后尝试运行此类(在actionPerformed
中)时,它不会更新JFrame
,我尝试了很多不同的东西(repaint()
, revalidate()
等等,但如果你能发现有助于实现的问题,那么它们都不起作用。
public class Scroll extends JPanel implements ActionListener {
private static final int N = 16;
private JTextArea last;
private int index;
JButton sort, Quit, search;
arraySorter array;
JFrame f;
String[]sValue;
double[]dValue;
boolean checks;
public Scroll(String[]sValues, double[]dValues, boolean check, String compare) {
sValue=sValues;
dValue=dValues;
checks=check;
this.setLayout(new GridLayout(0, 1, 3, 3));
System.out.println(compare);
if(check){
for (int i = 0; i < sValues.length; i++) {
if(sValues[i].contains(""+compare+""))this.add(create(i, sValues[i], 0, true));
}
}else{
for (int i = 0; i < dValues.length; i++) {
this.add(create(i, null, dValues[i], false));
}
}
}
private JTextArea create(int i, String j, double k, boolean check) {
if(check)last = new JTextArea(i+1+". "+j+"");
else last = new JTextArea(i+1+". "+k+"");
last.setEditable(false);
return last;
}
public void display() {
f = new JFrame("This is your sorted list!!!!");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new JScrollPane(this));
f.invalidate();
f.validate();
f.repaint();
f.setSize(300, 300);
JPanel panel=new JPanel();
f.add(panel, BorderLayout.NORTH);
Quit=new JButton("Quit");//sets instruction button for frame
//adds an actionlistener
Quit.addActionListener(this);
panel.add(Quit);
search=new JButton("search");//sets instruction button for frame
//adds an actionlistener
search.addActionListener(this);
panel.add(search);
f.invalidate();
f.validate();
f.repaint();
f.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==Quit){
f.dispose();
array=new arraySorter();
}
if(e.getSource()==search){
f.dispose();
String compare=JOptionPane.showInputDialog("What do you want to search for?");
f.removeAll();
new Scroll(sValue, dValue, checks, compare);
display();
}
}
}
答案 0 :(得分:0)
从它的外观来看,你正在关闭当前的JFrame,并在每次搜索时创建一个全新的JFrame。为什么不简单地创建一个updater方法来填充当前JFrame中的所有内容?您使用的方法效率极低,很可能是导致问题的原因。