Search code examples
javagraphicsshow-hidejcheckbox

Hide/Show an image drawn with Graphics


I have multiple images drawn with Graphics. How can I make them appear and disappear using a 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);
}

Solution

  • I would do it like that:

    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);
        }
    
    }
    

    You can't simply draw on a graphic and then hand it to a compoennt or so (I don't really understand what your given code should have done). Instead you have to overwrite the paintComponent method of a Component and put your custom drawing code in there.