나는 애플릿 클래스 (extend JApplet
)를 가지고있다. 클래스 안에서 나는 JPanel을 인스턴스화하고 JButton whit을 초기화하고있다 setEnabled(true)
. 사용자가 패널에서이 버튼을 클릭하고 몇 가지 처리를 수행 한 후에 JPanel 내부의 메소드를 호출하여 패널을 업데이트합니다. 그런 다음 setEnabled(false)
버튼을 JPanel에서 클릭합니다.자바 스윙 새로 고침 JPanel
그러나 메인 패널에서 add(ScrollPane)
을 호출하면 JPanel이 올바르게 "새로 고침"되지 않습니다. 처리 후 JButton을 활성화하지 않은 상태로 설정하면 (그리고 올바른 데이터가 있는지 확인한 후) JPanel은 여전히 초기화 된 형태로 유지됩니다.
즉, 애플릿 내의 JPanel에서 add(JScrollPane)
을 호출하면 실제로 패널이 새로 고쳐지기 때문에 무엇이 필요합니까?
기본적으로 궁금하네요. 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()");
}
}
코드를 공유 할 수 있습니까? –
"애플릿 내의 JPanel에 add (JScrollPane)를 호출하면 실제로 Panel이 새로 고쳐지기 때문에 무엇을해야합니까?" 애플리케이션에서 똑같은 일을 할 것입니다. 애플릿은 초보자 용이 아닙니다. BTW 1)'JPanel' /'Panel'은 올바른 클래스 이름을 사용하거나 Swing과 AWT를 섞지 않습니다. 2) 더 빨리 도움을 받으려면 [SSCCE] (http://pscode.org/sscce.html)를 게시하십시오. –
애플릿 내의 JPanel에서 add (JScrollPane)를 호출하면 실제로 JPanel이 새로 고쳐지기 때문에 어떻게해야합니까? – Satisfaction