Java Swing刷新JPanel
我有一个Applet类(扩展Java Swing刷新JPanel,swing,applet,jpanel,Swing,Applet,Jpanel,我有一个Applet类(扩展JApplet)。在这个类中,我实例化了一个JPanel,并初始化了一个JButton,其中包含setEnabled(true)。在用户单击面板中的这个按钮并进行一些处理之后,我调用JPanel中的一个方法来更新面板。然后我执行setEnabled(false)按钮在JPanel上单击 但是,在我调用主面板上的add(滚动窗格)之后,JPanel没有正确地“刷新”。在处理并将JButton设置为notenabled(并且我确认正确的数据在那里等)之后,JPanel仍然
JApplet
)。在这个类中,我实例化了一个JPanel,并初始化了一个JButton,其中包含setEnabled(true)
。在用户单击面板中的这个按钮并进行一些处理之后,我调用JPanel中的一个方法来更新面板。然后我执行setEnabled(false)
按钮在JPanel上单击
但是,在我调用主面板上的add(滚动窗格)
之后,JPanel没有正确地“刷新”。在处理并将JButton设置为notenabled(并且我确认正确的数据在那里等)之后,JPanel仍然处于初始化状态
换句话说,我需要做什么才能在applet内的JPanel上调用
add(JScrollPane)
,从而刷新面板
基本上我想知道:如果你更新了一个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()");
}
}
public void actionPerformed(ActionEvent e){
String command=e.getActionCommand();
if(STAMPA_命令等于(命令)){
stampa.setEnabled(false);
JPanel areaPrint=新的JPanel();
JLabel lab=新JLabel(“等待打印…”);
区域打印。背景色(颜色:洋红色);
区域打印。添加(实验室);
scrollArea.getViewport().add(areaPrint);//这就是问题所在……更改未刷新
试一试{
打印PDF打印PDF文件;
ArrayList assegniDaStampare=新的ArrayList();
对于(int i=0;i
首先,您不应该在操作中打开连接。请一位SwingWorker或其他执行人来执行此操作
其次,在添加滚动窗格后,尝试在面板上调用revalidate()。这两个修复程序应该可以解决这个问题。你能分享你的代码吗?“我需要做什么才能在applet内的JPanel上调用add(JScrollPane)来刷新面板?”与你在应用程序中所做的完全相同。小程序不适合新手。顺便说一下1)
JPanel
/Panel
使用正确的类名,或者不要将Swing与AWT混用。2) 为了更快地获得更好的帮助,发布一个。我需要做什么才能在applet中的JPanel上调用add(JScrollPane)来实际刷新JPanel?