JFrame不会更新

时间:2014-02-15 05:51:24

标签: java swing search jframe

当我在搜索后尝试运行此类(在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();
        }
    }

}

1 个答案:

答案 0 :(得分:0)

从它的外观来看,你正在关闭当前的JFrame,并在每次搜索时创建一个全新的JFrame。为什么不简单地创建一个updater方法来填充当前JFrame中的所有内容?您使用的方法效率极低,很可能是导致问题的原因。