求助,这个bug到底如何解决

x1127856657 2015-10-08 08:12:50
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import java.awt.image.*;

public class Test {
public class HalfTransparentImageDemo extends JFrame{
private static final long serialVersionUID = 1L;
private Container content =getContentPane();//获得窗口容器
private JSlider jSlider =new JSlider (JSlider.HORIZONTAL,0,100,75);//改变图像透明度
DisplayPanel displayPanel = new DisplayPanel();//显示图形面板
public HalfTransparentImageDemo(){
super("半透明图片");//调用父类构造器
jSlider.setPaintTicks(true);//绘制标志位
jSlider.setMajorTickSpacing(25);//设置标志尺寸
jSlider.setMinorTickSpacing(5);
jSlider.setPaintLabels(true);//绘制出数字
jSlider.setBorder(new TitledBorder(BorderFactory.createEmptyBorder(),"图像的透明度(%)"));//设置边框
jSlider.addChangeListener(new ChangeListener(){//滑动条jSlider事件处理
public void stateChanged(ChangeEvent ce){
float alpha=
((float)((JSlider) ce.getSource()).getValue())/100;
displayPanel.alpha=alpha;//改变图像的透明度
displayPanel.repaint();}
});
content.add(jSlider,BorderLayout.SOUTH);
content.add(displayPanel,BorderLayout.CENTER);
setSize(300,300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void main(String[] args){
new HalfTransparentImageDemo();
}
class DisplayPanel extends JPanel{
private static final long serialVersionUID = 1L;
String[] imageName ={"back.jpg","girl.gif"};//图像文件名数组
BufferedImage bufImage1,bufImage2;
float alpha=0.75f;
public BufferedImage loadBufImage(String fileName) throws InterruptedException{
Image image=getToolkit().getImage(fileName);
MediaTracker mt=new MediaTracker(this);
mt.addImage(image, 0);
mt.waitForAll();
BufferedImage bufImage =new BufferedImage(image.getWidth(this),image.getHeight(this),BufferedImage.TYPE_INT_ARGB);
Graphics bufImageG2D=bufImage.createGraphics();
bufImageG2D.drawImage(image, 0, 0,this);
return bufImage;
}
public DisplayPanel() throws Exception{
bufImage1=loadBufImage(imageName[0]);
bufImage2=loadBufImage(imageName[1]);
}
public void paint(Graphics g){
Graphics2D g2d=(Graphics2D) g;
g2d.drawImage(bufImage1, 0,0,this);
int compositeRule =AlphaComposite.SRC_OVER;
AlphaComposite alphaComposite=AlphaComposite.getInstance(compositeRule,alpha);
g2d.setComposite(alphaComposite);
g2d.drawImage(bufImage2, 0, 0, this);
}

}
}

}
...全文
178 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
三仙半 2015-10-13
  • 打赏
  • 举报
回复
关于Java的基本的语法规范,需要找一本入门的教程耐心的看,跟着做,不是一两句话的事情,我学Java那会儿是看的孙鑫的视频教程,你百度一下,应该还能找到,其实关于基础,很多视频教程,守着一个从头到尾慢慢看,不能随便跳过。
x1127856657 2015-10-09
  • 打赏
  • 举报
回复
引用 2 楼 三仙半的回复:
楼主,您这是啥意思?出啥问题了?运行不了,是吗?您这Test类里面套着一个HalfTransparentImageDemo类,HalfTransparentImageDemo 类里面又套着一个DisplayPanel类,您这个结构是想达到什么目的?main()方法您想放在哪里? 我是真糊涂了。。。。。。我坐等楼主指教了。。。。。。
这个我刚学java,对逻辑大块结构确实不太清楚,用的是eclipse,就是建立一个类然后一股脑的把代码全部敲进去,具体怎么样确实不清楚,希望大神赐教,我诚心受教,万分感谢 还有个疑问我建个类继承一个父类吗,用的eclipse,难道在new class 写类名是要A extends B 这样写吗?虚心求教,万分感谢
三仙半 2015-10-09
  • 打赏
  • 举报
回复
还有一个地方,就是定义
DisplayPanel displayPanel = new DisplayPanel();//显示图形面板
这个地方,将new操作移到HalfTransparentImageDemo 类的构造方法里面去,还得用try...catch...包上
三仙半 2015-10-09
  • 打赏
  • 举报
回复
1、将HalfTransparentImageDemo 类从Test类中分离出来,如果还是在Test.java中,要将类定义的public去掉 2、将DisplayPanel 类从HalfTransparentImageDemo 类中分离出来 3、此时,Test类中应该只剩一个main()方法,将它改成静态的,也就是在方法定义的public后加上static修饰 4、此时应该可以运行了,只要能找到那两张图片,运行效果还不错,嘿嘿
三仙半 2015-10-09
  • 打赏
  • 举报
回复
楼主,您这是啥意思?出啥问题了?运行不了,是吗?您这Test类里面套着一个HalfTransparentImageDemo类,HalfTransparentImageDemo 类里面又套着一个DisplayPanel类,您这个结构是想达到什么目的?main()方法您想放在哪里? 我是真糊涂了。。。。。。我坐等楼主指教了。。。。。。
KeepSayingNo 2015-10-08
  • 打赏
  • 举报
回复
啥问题啊,没看出来

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧