2012-02-14 93 views
0

我有一個奇怪的問題......按鈕不會顯示

我有一個JFrame,並增加了兩個JInternalFrame的

我加入一個JPanel到內部框架中的一個。

我用jpanel的鼠標監聽器寫了一個代碼,就像我放開鼠標時放置一個設備對象(一個類extendng jpanel)。

設備圖像顯示,但只有在我移動d內部框架或最大化它..爲什麼是達?

下面的代碼爲JPanel中被添加到內部框架中的一個......

public class Board extends JPanel implements MouseListener{ 
Device[] devices=new Device[10]; 

int X,Y,i=0; 
int j=10; 

Point p1,p2; 

ImageIcon icon; 
public Board() 
{ 
    setBackground(Color.WHITE); 
    this.addMouseListener(this); 
    setLayout(null); 


} 

public void mouseClicked(MouseEvent me){ 

} 
public void mouseExited(MouseEvent me){ 
} 
public void mouseEntered(MouseEvent me){ 

} 
public void mousePressed(MouseEvent me){ 
} 

public void mouseReleased(MouseEvent me){ 

    X=me.getX(); 
    Y=me.getY(); 

    icon=new ImageIcon("E:\\java\\ecadpb\\src\\ecadpb\\device"+Layout1.clicked+".png"); 

    devices[i].setBounds(X,Y,icon.getIconWidth(),icon.getIconHeight()+20); 
    devices[i].setVisible(true); 
    this.add(devices[i]); 
    this.repaint(X,Y,icon.getIconWidth(),icon.getIconHeight()+20); 
    i++; 
    } 

} 

} 

以下是設備類..

public Device(Point pos,JLabel label,Rectangle r,int input,int output){ 
    setVisible(true); 
    setBackground(Color.BLACK); 
    deviceNo=dno; 
    position=pos; 
    inputs=input; 
    outputs=output; 
    this.r=r; 

    label.setLayout(null); 
    setOpaque(false); 
    this.add(label); 
    label.addMouseListener(this); 
    dno++; 


} 

} 

回答

0

Swing也奠定了新組件層次結構。看看JComponent.revalidate()及其相關方法。

+0

奇妙!我叫revalidate()方法,它解決了這個問題..非常感謝! – 2012-02-14 19:14:37

+0

優秀 - 請將此答案標記爲接受:) – 2012-02-14 19:15:36

0

打電話給你添加了一個組件後:

this.add(devices[i]); 
revalidate();