Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重新测试jpanels_Java_Swing_Jpanel_Cardlayout - Fatal编程技术网

Java 重新测试jpanels

Java 重新测试jpanels,java,swing,jpanel,cardlayout,Java,Swing,Jpanel,Cardlayout,我需要在我正在编写的应用程序中重新实例化JPanel(基本上,它是一个输入窗口,用户可以在其中构建图形,我希望用户能够清空它,因此使用CardLayout不是一个选项),我正在考虑使用这样的东西: import java.awt.Color; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; impor

我需要在我正在编写的应用程序中重新实例化
JPanel
(基本上,它是一个输入窗口,用户可以在其中构建图形,我希望用户能够清空它,因此使用
CardLayout
不是一个选项),我正在考虑使用这样的东西:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class AppletProve extends JPanel implements MouseListener, MouseMotionListener{

private JPanel p1;
public AppletProve(){
    super();
    setLayout(null);
    Dimension dim=Toolkit.getDefaultToolkit().getScreenSize();
    dim.width=(int) (dim.width*0.66);
    dim.height=(int) (dim.height*0.75);
    setPreferredSize(dim);
    addMouseListener(this);
}
public void crea(){
    p1=new JPanel();
    p1.setBounds(10,10,60,70);
    p1.setBackground(Color.YELLOW);
    JLabel lbl1=new JLabel("prova1");
    p1.add(lbl1);
    add(p1);
}
public void collega(){
    remove(p1);
    p1=new JPanel();
    p1.setBounds(10,10,60,70);
    p1.setBackground(Color.BLUE);
    JLabel lbl2=new JLabel("prova2");
    p1.add(lbl2);
    add(p1);
}
@Override
public void mouseClicked(MouseEvent arg0) {
    System.out.println("chiamato");
    collega();

}
@Override
public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub

}
@Override
public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub

}
@Override
public void mousePressed(MouseEvent arg0) {
    // TODO Auto-generated method stub

}
@Override
public void mouseReleased(MouseEvent arg0) {
    // TODO Auto-generated method stub

}
@Override
public void mouseDragged(MouseEvent arg0) {
    repaint();

}
@Override
public void mouseMoved(MouseEvent arg0) {
    // TODO Auto-generated method stub

}
}
问题是,当面板p1重新实例化时,由于背景颜色发生变化,因此不会显示lbl2,如果我只需将面板重新实例化为空白状态,这也不会太糟糕,但我正在考虑使用此方法通过装饰器模式为面板添加职责,所以我需要展示新恢复面板的组件

我希望用户能够清空它,所以使用CardLayout不是一个选项

当然是。见

我希望用户能够清空它,所以使用CardLayout不是一个选项


当然是。你是说我应该创建一个新的JPanel,将它添加到布局中,然后删除旧的?这可能有助于我将面板放在JFrame中,因为我使用Eclipse的WindowBuilder来编写它(哦,顺便说一句,我刚刚发现代码有什么问题:我忘了验证()),我没有深入考虑它(也没有仔细查看您的代码)。我只是指出你的帖子是基于一个误解。所以你是说我应该创建一个新的JPanel,将它添加到布局中,然后删除旧的?这可能有助于我将面板放在JFrame中,因为我使用Eclipse的WindowBuilder来编写它(哦,顺便说一句,我刚刚发现代码有什么问题:我忘了验证()),我没有深入考虑它(也没有仔细查看您的代码)。我只是指出你的帖子是基于一个误解。