2017-07-07 14 views
0

我有用圖形繪製的多個圖像。我如何使它們出現並使用JCheckBox消失?隱藏/顯示用圖形繪製的圖像

private void drawImages(int index) { 
    Graphics g = mNew.getGraphics(); 
    int x = index % this.width; 
    int y = index/this.width; 
    g.drawImage(imageLabelPixel.get(idImage-1), x, y, 100, 100, null); 
} 
+0

'if(JCheckBox.isChecked)drawImage();' –

+0

爲了得到更好的幫助,儘快發佈一個合適的[mcve],我們可以複製粘貼並查看您想要實現的結果 – Frakcool

回答

0

我會做這樣的:

JCheckBox cb = new JCheckBox(); 
ImgPanel p = new ImgPanel(); 

cb.addActionListener(new ActionListener(){ 
    @Override 
    public void actionPerformed(ActionEvent evt){ 
     if(cb.isSelected){ 
      p.set(0); 
     } else { 
      p.set(-1); 
     } 
    } 
}); 

public class ImgPanel extends JPanel { 

    private int i = 0; 
    private List<BufferedImage> imgs; 

    public ImgPanel(){ 
     //init imgs 
    } 

    public void set(){ 
     i = 0; 
     repaint(); 
    } 

    @Override 
    public void paintComponent (Graphics g){ 
     super.paintComponent(g); 

     if(i >= 0){ 
      Image img = imgs.get(i-1); 
      Image img1 = img.getScaledInstance(100, 100, null); 
     } 

     g.drawImage(img1, 0, 0, null); 
    } 

} 

你不能簡單地畫一個圖形,然後把它交給一個compoennt左右(我真的不明白你定的代碼應該做的)。相反,您必須覆蓋組件的paintComponent方法,並將您的自定義繪圖代碼放在那裏。

+0

事實上,我有一個長期項目多功能,這就是爲什麼我沒有在這裏張貼他們。我有一個BufferedImages矢量,並且此函數drawImages將矢量的每個圖像繪製在另一個圖像(背景圖像)上。所以我試圖做的是使用JCheckBox消除所有這些圖像。我只想在選擇JCheckBox時只看到背景圖像。 – kazrak

+0

然後,您可以創建一個ArrayList,它將JCheckBoxes的狀態保存在其中,以便列表中的每個索引都將代表您的某個圖層的啓用狀態。在drawImage中,您只需驗證爲給定索引保存的布爾值,並根據該值繪製圖像或不要。編輯:要找出複選框的狀態何時更改,只需向它們添加一個ItemListener或一個ActionListener。 – Galveston01

+0

謝謝,這個作品! – kazrak

1

您不會使用圖形在要刪除的屏幕上繪製某些東西。圖形只是在屏幕上顯示它,以及您繪製的所有其他圖形,它不會跟蹤組件

您的選項是將操作事件添加到複選框並從頭開始重新繪製屏幕而不繪製圖像,或只使用一個Label繪製圖像,並將其設置爲不可見,當複選框被選中