0
我需要在我正在編寫的應用程序中重新實例化一個JPanel
(基本上它是用戶可以創建圖形的輸入窗口,我希望用戶能夠清空它,因此使用CardLayout
不是一個選項),我想用這樣的事情的:Reinstantiating jpanels
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的問題,這將不會是如果我只需要將面板重新實例化爲空白狀態,那就不好了,但我正在考慮使用此方法通過裝飾器模式向面板添加責任,因此我需要顯示新增加的組件斜面板。
所以你說我應該創建一個新的JPanel,將它添加到佈局,然後刪除舊的?這可能會幫助我把面板放在它的JFrame中,因爲我使用Eclipse的WindowBuilder來編寫它(哦,順便說一句,我只是覺得代碼有什麼問題:我忘了驗證()) – Orgrim
我沒有深思熟慮仔細查看你的代碼)。我只是在指出你的帖子是基於誤解。 –