Hide/Show 用 Graphics 绘制的图像
Hide/Show an image drawn with Graphics
我用 Graphics 绘制了多张图像。如何使用 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);
}
您不会使用图形在屏幕上绘制要删除的内容。图形只是将它与您绘制的所有其他图形一起呈现在屏幕上,它不会跟踪组件
您的选择是向您的复选框添加一个动作事件并从头开始重新绘制屏幕而不是绘制图像,或者只使用 Label
绘制图像并在框出现时将其设置为不可见检查
我会这样做:
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);
}
}
您不能简单地在图形上绘制然后将其交给某个组件(我真的不明白您给定的代码应该做什么)。相反,您必须覆盖组件的 paintComponent 方法并将您的自定义绘图代码放在那里。
我用 Graphics 绘制了多张图像。如何使用 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);
}
您不会使用图形在屏幕上绘制要删除的内容。图形只是将它与您绘制的所有其他图形一起呈现在屏幕上,它不会跟踪组件
您的选择是向您的复选框添加一个动作事件并从头开始重新绘制屏幕而不是绘制图像,或者只使用 Label
绘制图像并在框出现时将其设置为不可见检查
我会这样做:
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);
}
}
您不能简单地在图形上绘制然后将其交给某个组件(我真的不明白您给定的代码应该做什么)。相反,您必须覆盖组件的 paintComponent 方法并将您的自定义绘图代码放在那里。