Java Swing刷新JPanel

| 我有一个Applet类(扩展
JApplet
)。在类内部,我实例化了一个JPanel并初始化了一个JButton
setEnabled(true)
。用户单击面板中的此按钮并进行一些处理后,我在JPanel内部调用一个方法来更新面板。然后,我在JPanel上单击“ 2”按钮。 但是,在主面板上调用
add(ScrollPane)
后,JPanel无法正确“刷新”。在处理并将JButton设置为未启用(并且我确认那里有正确的数据等)之后,JPanel仍处于其初始化形式。 换句话说,我需要怎么做才能在applet内的JPanel上调用
add(JScrollPane)
实际上刷新面板? 基本上,我想知道:如果您更新嵌套在JApplet内的swing组件内的面板,更新是否可见?如果没有刷新,需要做什么? 这是代码:
public void actionPerformed(ActionEvent e) {
    String command = e.getActionCommand();

    if (STAMPA_COMMAND.equals(command)) {

        stampa.setEnabled(false);
        JPanel areaPrint = new JPanel();
        JLabel lab = new JLabel(\"Wait Printing...\");
        areaPrint.setBackground(Color.magenta);
        areaPrint.add(lab);
        scrollArea.getViewport().add(areaPrint); // THIS IS THE PROBLEM...THE CHANGE ARE NOT REFRESHED

        try {
            PrintPdf printPDFFile;
            ArrayList assegniDaStampare = new ArrayList();

            for (int i = 0; i < assegni.size(); i++) {
                DatiAssegno datiAss = (DatiAssegno) assegni.get(i);

                if (datiAss != null && datiAss.getStatoAssegno().equals(STATUS_OK)) {
                    printPDFFile = new PrintPdf(\"Stampa Assegni\", datiAss);

                    printPDFFile.print();

                    String servletLocation = \"http://localhost/Servlet\";

                    //         connect to the servlet 

                    URL studentDBservlet = new URL(servletLocation);
                    URLConnection servletConnection = studentDBservlet.openConnection();
                    servletConnection.setUseCaches(false);
                    servletConnection.setDefaultUseCaches(false);
                    servletConnection.setDoInput(true);
                    servletConnection.setDoOutput(true);

                    OutputStream outstream = servletConnection.getOutputStream();
                    ObjectOutputStream oos = new ObjectOutputStream(outstream);
                    oos.writeObject(datiAss.idAssegno);
                    oos.flush();
                    oos.close();

                    ObjectInputStream inputFromServlet = new ObjectInputStream(servletConnection.getInputStream());
                    try {
                        String statusSave = (String) inputFromServlet.readObject();
                    } catch (ClassNotFoundException e4) {
                        e4.printStackTrace();
                    }
                }
            }
            JPanel areaPrint2 = new JPanel();
            JLabel lab2 = new JLabel(\"Print Complete\");
            areaPrint2.setBackground(Color.green);
            areaPrint2.add(lab2);
            scrollArea.getViewport().add(areaPrint2);
        } catch (FileNotFoundException e1) {
            //do something
        } catch (IOException e2) {
            //do something
        } catch (PrinterException e3) {
            //do something
        }
    }
    if (EXIT_COMMAND.equals(command)) {
        JSObject win = JSObject.getWindow(appletParent);
        appletParent.stop();
        appletParent.destroy();
        win.eval(\"self.close()\");
    }
}
    
已邀请:
        首先,您不应该在操作中打开连接。使用SwingWorker或其他执行程序来执行此操作。 其次,尝试在添加滚动窗格后在面板上调用revalidate()。这两个修复程序应该可以解决问题。     

要回复问题请先登录注册