我有一個程序通過GridBagLayout佈局管理器顯示4x4方格網格。將顯示全部包含square.gif的16個JLabels。點擊其中一個矩形時,應該用包含圖像的JLabel(例如帽子)替換它。所以,圖像取代了被點擊的矩形。無法使用GridBagLayout替換其他JLabel JLabel
但是,此刻發生的情況是,僅點擊的矩形有時會被替換。其他時候,矩形會消失,但圖像不會取代它。其他時候,圖像將顯示在之前點擊過的矩形中,但只有在單擊不同的矩形後纔會顯示。我在下面放置了最相關的代碼。
public void displayGrid() {
c.gridx = 0;
c.gridy = 0;
try {
squareImage = ImageIO.read(this.getClass().getResource("stimulus(0).gif")); //line 37
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JLabel squareLabel = new JLabel(new ImageIcon(squareImage));
for(int i = 0; i < 16; i++){
c.gridx = i % 4;
c.gridy = i/4;
squareLabel = new JLabel(new ImageIcon(squareImage));
squareLabels[i] = squareLabel;
panel.add(squareLabels[i], c);
squareLabels[i].addMouseListener(this);
System.out.println(c.gridx + "" + c.gridy);
}
panel.validate();
}
public void mousePressed(MouseEvent e) {
for(int i = 0; i < squareLabels.length; i++){
if(e.getSource() == squareLabels[i]){
//JLabel removedLabel = squareLabels[i];
c.gridx = (i/4);
c.gridy = (i%4);
panel.remove(squareLabels[i]);
panel.revalidate();
panel.repaint();
panel.add(stimuliLabels[0], c);
panel.validate();
}
}
}
在的mousePressed()方法,我試圖編寫的代碼,確定被按下的一個JLabel時,獲取的JLabel的的GridBagConstraints,刪除該被點擊選擇JLabel,然後替換的JLabel與具有給定GridBagConstraints的新JLabel。但是,正如我已經說過的那樣,該計劃沒有按計劃進行,我不知道爲什麼。
感謝您花時間閱讀本文。任何幫助,將不勝感激。
不知道爲什麼我沒有想到這一點。謝謝。 「與圖書館合作,而不是反對」是什麼意思? – lb91
@ lb91:因爲JLabel是用來交換圖標的,所以它們很容易處理,它涉及到程序員方面的小開銷,不需要重新繪製,重新驗證,移除,添加......所有你需要做的事情是'setIcon(...)'就是這樣。這對圖書館來說非常合適。 –
我只記得我爲什麼要改變JLabel。原因是我不知道如何確定一個矩形已經被點擊(我只想每個矩形被點擊一次)。如果點擊4個矩形,JPanel將刪除所有組件。但是,如果我只是更改圖標,我無法確定JLabel已被點擊過一次。 – lb91