嗯本来是不打算写这篇的,可是同学说我之前的程序太丑了,MVP竟然连图都没有??很气,果断加图。不就是要MVP的照片么,给你就是了。
emmm。。。可是,我才发现原来一直不会画图,程序和之前的差不多,多了几行画图的代码而已。
程序最后的效果长这样:界面开始的样子。
点击了Start按钮之后进入抽取MVP环节,结束后成第二张图:(嗯James是MVP)
总结一下过程中我希望实现的功能及其解决步骤,
1.让一开始的MVP奖杯作为窗体的背景,也就是窗体一打开就有。
bug1: 我采用了之前学的先用ImageIcon对象加载图片,然后放在JLabel标签上,再将JLabel贴到面板上。1
程序运行后貌似和自己预期差不多,有背景了。可是到线程那边用同样的方法加载图片是才发现这是不对的;
心理活动就是:“震惊!!!我一直在添加图片而不是在覆盖图片!!!”
错误代码如下
ImageIcon tu = new ImageIcon("C:/Users/john/Desktop/杂七杂八/tu/mvp.png");
JLabel labelImg = new JLabel(tu);
tupanel.add(labelImg);
好的,方法一失败。我明白了贴图用在这里是不准确的,所以决定画图。
bug2: 因为我的图片是画在放在west的一个JPanel对象tupanel上,所以就从tupanel上取得画笔再画。嗯,最后发现,报空指针异常了。我有点懵了。。然后才知道,取画笔还是应该在this.setVisible(true);之后取,而不是tupanel.setVisible(true);之后取。否则就空了。(具体原因还没搞懂)
好了,改过来后,我有引用了一个工具包来获得图片,代码如下:
g=tupanel.getGraphics();
Image image9 = Toolkit.getDefaultToolkit().getImage( "C:/Users/john/Desktop/杂七杂八/tu/mvp.png");
g.drawImage(image9, 15, 15, 300, 350, null);
bug3: 嗯,后来发现出不了图片,因为最后一个null参数的原因。
最后一个参数ImageObserver observer,表示当转换了更多图像时要通知的对象。如果为null,则出不了图。改成this即可。
bug4: 嗯为什么图片一下子就过去了??oh,重绘。所以我们应该将上面的代码放在paint(Graphics g)方法中,否则就是一闪而过。
好了我想实现的第一个功能解决了。
2.线程执行时,第x张图和第x个字符串同时出现。
bug:因为字符串随机生成时我用str.leng去控制它,但是具体是第几个我没注意;而此时就需要注意图片的次序了,一开始是运行结果发现数组越界了,才想起来数组从0开始,我的判断条件却是从1开始的。。。
OK,到此这个程序的改版工作已经结束了。
线程部分的代码如下:
package Game180710gaiban;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Random;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Lotterythread extends Thread {
private String str[]={"Lebron James","James Harden","Steven Curry","Kevin Duant","Ivring","Leonard"};
public JLabel label;
public volatile boolean flag=false;
public JPanel panel;
public WHOMVP w;
public Lotterythread(JLabel label,WHOMVP w){
this.label=label;
this.flag=flag;
this.panel=w.tupanel;
// start();
}
public void run(){
while(true){
// System.out.println(flag);
if(flag)
{
int i=new Random().nextInt(str.length);
label.setText(str[i]);
Graphics g=panel.getGraphics();
//震惊!!!我一直在添加图片而不是在覆盖图片!!!
// System.out.println(label.getText());
Image tu1 = Toolkit.getDefaultToolkit().getImage("C:/Users/john/Desktop/杂七杂八/tu/james.png");
Image tu2 = Toolkit.getDefaultToolkit().getImage("C:/Users/john/Desktop/杂七杂八/tu/harden.png");
Image tu3 = Toolkit.getDefaultToolkit().getImage("C:/Users/john/Desktop/杂七杂八/tu/curry.png");
Image tu4 = Toolkit.getDefaultToolkit().getImage("C:/Users/john/Desktop/杂七杂八/tu/Durant.png");
Image tu5 = Toolkit.getDefaultToolkit().getImage("C:/Users/john/Desktop/杂七杂八/tu/iving.png");
Image tu6 = Toolkit.getDefaultToolkit().getImage("C:/Users/john/Desktop/杂七杂八/tu/Leonad.png");
if(i==0){
g.drawImage(tu1, 15, 15, 300, 350, w);
}
else if(i==1){
g.drawImage(tu2, 15, 15, 300, 350, w);
}
else if(i==2){
g.drawImage(tu3, 15, 15, 300, 350, w);
}
else if(i==3){
g.drawImage(tu4, 15, 15, 300, 350, w);
}
else if(i==4){
g.drawImage(tu5, 15, 15, 300, 350, w);
}
else if(i==5){
g.drawImage(tu6, 15, 15, 300, 350, w);
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
}
}