, когда я пытаюсь запустить этот класс после того, как я искать его (в actionPerformed
) он не обновляет JFrame
, я попытался целую кучу разных вещей (repaint()
, revalidate()
и т.д.), но ни один из них работают, если бы вы могли обнаружить проблему, которая могла бы помочь.JFrame не будет обновлять
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();
}
}
}
Попробуйте заменить f.dospose() на f.setVisible (false). – selalerer
Не знаете, что именно вы пытаетесь сделать, но я вижу удаление компонентов и добавление компонентов. Кажется, ваша ситуация лучше подходит для «CardLayout». См. Примеры из [** этого вопроса **] (http://stackoverflow.com/questions/21592492/how-can-i-switch-between-jpanels) и исполняемый пример из [** этого ответа **] (http : //stackoverflow.com/a/21460065/2587435) и [** Как использовать CardLayout **] (http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html) –
it doesn 't обновление средств JFrame означает, что JFrame не отображается или отображается JFrame, но JPanel не отображается? – user12458