我正在为我的高中计算机科学课(一个真正平庸的口袋妖怪游戏)做最后的项目,我在使用switch语句时遇到了麻烦,我在其中添加了带有ImageIcon的Jlabel。
当我运行驱动程序并打开此面板时,它应该添加一个随机对手,这就是switch语句的用途,它给oppHP变量一个值,取决于对手是谁。底部的PaintComponent设置背景图像。问题是,当我运行它时,没有对手的图片显示它只是背景图像。
请记住,我对编码非常陌生,所以我可能不理解它的探索,换句话说,如果它不是太麻烦,试着保持简单。谢谢!
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Lucario extends JPanel {
private int myHP;
private int oppHP;
private boolean ok;
private int rand;
private JButton olabel;
private JButton mlabel;
public Lucario() {
ImageIcon lIcon = new ImageIcon("opplucario.png");
ImageIcon sIcon = new ImageIcon("oppsylveon.png");
ImageIcon cIcon = new ImageIcon("oppcharizard.png");
ImageIcon grIcon = new ImageIcon("oppgreninja.png");
ImageIcon geIcon = new ImageIcon("oppgengar.png");
ImageIcon mIcon = new ImageIcon("oppmystery.png");
for (int k = 0; k < 1; k++) {
rand = (int) (Math.random() * 6);
}
switch (rand) {
case 0:
JLabel l = new JLabel();
l.setIcon(lIcon);
add(l);
oppHP = 344;
break;
case 1:
JLabel s = new JLabel();
s.setIcon(sIcon);
add(s);
oppHP = 394;
break;
case 2:
JLabel c = new JLabel();
c.setIcon(cIcon);
add(c);
oppHP = 360;
break;
case 3:
JLabel gr = new JLabel();
gr.setIcon(grIcon);
add(gr);
oppHP = 348;
break;
case 4:
JLabel ge = new JLabel();
ge.setIcon(geIcon);
add(ge);
oppHP = 324;
break;
case 5:
JLabel m = new JLabel();
m.setIcon(mIcon);
add(m);
oppHP = 400;
break;
}
myHP = 344;
this.setLayout(null);
olabel = new JButton("HP: " + oppHP);
olabel.setFont(new Font("Serif", Font.BOLD, 20));
olabel.setBounds(70, 100, 150, 40);
olabel.setOpaque(false);
olabel.setContentAreaFilled(false);
olabel.setBorderPainted(false);
add(olabel);
mlabel = new JButton("HP: " + myHP);
mlabel.setFont(new Font("Serif", Font.BOLD, 20));
mlabel.setBounds(350, 330, 150, 40);
mlabel.setOpaque(false);
mlabel.setContentAreaFilled(false);
mlabel.setBorderPainted(false);
add(mlabel);
}
public void paintComponent(Graphics g) {
ImageIcon Backg = new ImageIcon("playbg.png");
g.drawImage(Backg.getImage(), 0, 0, 590, 590, this);
}
}
答案 0 :(得分:2)
主要问题是您使用null
布局,例如......
JLabel m = new JLabel();
m.setIcon(mIcon);
add(m);
默认情况下, m
没有尺寸或位置信息(0x0
@ 0x0
)
适当的答案是使用一个或多个适当的布局管理器
答案 1 :(得分:1)
public void paintComponent(Graphics g) {
ImageIcon Backg = new ImageIcon("playbg.png");
应该是:
public void paintComponent(Graphics g) {
super.paintComponent(g);
URL
而不是File
访问资源。有关标记的info page,请参阅URL
。