Java Swing обновить JPanel - PullRequest
0 голосов
/ 14 июня 2011

У меня есть класс Applet (расширяет JApplet). Внутри класса я создаю экземпляр JPanel и инициализирую JButton whit setEnabled(true). После того, как пользователь нажимает эту кнопку на панели и выполняет некоторую обработку, я вызываю метод внутри JPanel для обновления панели. Затем я setEnabled(false) нажимаю кнопку на JPanel.

Тем не менее, JPanel не «обновляется» правильно после того, как я позвонил add(ScrollPane) на главной панели. После обработки и установки JButton в состояние «не включено» (и я подтвердил, что там есть нужные данные и т. Д.), JPanel все еще находится в своей инициализированной форме.

Другими словами, что мне нужно сделать, чтобы вызов add(JScrollPane) на JPanel в апплете фактически обновил Panel?

По существу, мне интересно: если вы обновите панель внутри компонента Swing, который вложен в JApplet, должно ли обновление быть видимым? Что нужно сделать, чтобы обновить, если нет?

ЭТО КОД:

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()");
    }
}

1 Ответ

1 голос
/ 15 июня 2011

Во-первых, вы не должны открывать соединение в рамках действия.Используйте SwingWorker или другого исполнителя для этого.

Во-вторых, попробуйте вызвать revalidate () на панели после добавления полосы прокрутки.Эти два исправления должны решить проблему.

...