Java 用JButton更改ImageBackground?
我希望能够用一个简单的按钮改变背景。背景和我将添加的所有其他组件将在JPanel上替换。我已经知道了如何使用Java.awt设置背景,尽管我无法知道如何在不出错的情况下重新绘制背景Java 用JButton更改ImageBackground?,java,image,swing,user-interface,awt,Java,Image,Swing,User Interface,Awt,我希望能够用一个简单的按钮改变背景。背景和我将添加的所有其他组件将在JPanel上替换。我已经知道了如何使用Java.awt设置背景,尽管我无法知道如何在不出错的情况下重新绘制背景 public class StartPanel extends JPanel{ private Image virus = "ImagePath"; private Image ecoli = "ImagePath"; private Graphics g; private bo
public class StartPanel extends JPanel{
private Image virus = "ImagePath";
private Image ecoli = "ImagePath";
private Graphics g;
private boolean img;
public StartPanel(){
this.setLayout(null);
this.add(Button());
img = true;
}
private JButton Button(){
JButton b = new JButton("a");
b.setBounds(230,480,20,20);
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
img = !img;
repaint();
}
});
return b;
}
public void paint(Graphics g){
If(img){
g.drawImage(ecoli,0,0,this);
} else {
g.drawImage(virus,0,0,this);
}
}
}
你不能仅仅用一个字符串初始化你的图像,它们需要以其他方式初始化。我认为最简单的方法是使用图像图标,如下所示:
Image ecoli = new ImageIcon("ImagePath").getImage();
如果你对你的awt图像没问题 对于更改任务,只需使用在actionlistener中切换的布尔开关
public class StartPanel extends JPanel{
private BufferedImage virus;
private BufferedImage ecoli;
boolean pic1;
public StartPanel(){
try{
virus = ImageIO.read(new File("PathtoImage"));
ecoli = ImageIO.read(new File("PathtoImage"));
}
catch (IOException ex){
System.out.println("Error ;-)");
}
this.setLayout(null);
this.add(Button());
pic1 = true;
}
private JButton Button(){
JButton b = new JButton("a");
b.setBounds(230,480,20,20);
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
pic1 = !pic1;
repaint();
}
});
return b;
}
protected void paintComponent(Graphics g){
if(pic1)
g.drawImage(ecoli,0,0,this);
else
g.drawImage(virus,0,0,this);
}
}
如果您有两张以上的图片,请将int与switch case结合使用谢谢阅读我的文章。我知道。我只是用这个字符串来隐藏实际的图像路径。你的帖子里有点不清楚问题出在哪里。你到底得到了什么错误?错误不重要,因此我没有详细解释错误“错误不重要,因此我没有详细解释错误”-也许对你来说,但对我们来说,它们所做的只是产生更多的猜测。不幸的是,你的建议不起作用。问题是当面板初始化时,paintComponent会绘制图像。您的代码只是更改了应绘制图像的布尔值,但在按下按钮后,它不会更改实际背景,这在窗口出现之前是不可能发生的。@Power Elch对不起!我忘记了最重要的^^->将repaint()添加到actionlistener(我编辑了我的示例)您也忘记了调用
super.paintComponent
1)this.setLayout(null)代码>Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或与布局填充和边框一起使用。2) public void paint(Graphics g){
对于任何JComponent
,都应该是public void paintComponent(Graphics g){
3)public void update(){
不要触摸此方法。4)…4)Graphics g=getGraphics()
不,不,一千次不。这是进行自定义绘制的错误方法。请阅读本教程的课程,了解如何正确地进行绘制。“我找到了解决方案。无需回复。”-然后删除question@AndrewThompson,谢谢你的建议。你的观点完全有道理,但对于一个学校项目来说,这太过分了。我已经按照Abgehter建议的方式改变了它。尽管它们仍然存在问题,JComponents被图片覆盖,只有点击它们才能看到。你知道如何解决这个问题吗?“。对于一个学校项目来说,这是一个过火的行为。”如果你认为用良好的实践来学习编码是“过火的行为”,那么这门课程可能不适合你。目前,上面的内容看起来像是‘用魔法编码’。正如你所看到的,魔法不起作用。“你知道如何解决这个问题吗?”我在前4点中总结了它们。@MadProgrammer”然后删除问题“完全同意。这个问答从人类知识的总和中减去。”。