Java 每次我按下滚动按钮,它都会留下滚动按钮的图片
我想做一个蛇和梯子的游戏。它还没有完成(没有交换回合,没有使用梯子和蛇),并且有很多bug 但我的观点是 我发现了一个让我非常好奇的问题(下图)。这是一个象征性的举动。我的策略是在一个大的JPanel(我将其命名为Board)上添加一个[10][10]JPanal数组(我将其命名为class),我将其背景设置为google提供的蛇和梯子游戏的图片,并将布局设置为gridlayout(10,10)。在每个单元格上都有一个隐藏的标记,只有当按下滚动按钮并将输出点指向该单元格时才会显示 这就是问题发生的地方 每次我按下按钮都会出现一个按钮!(但它们不可单击。) 我知道我的起点甚至不在左下角的正方形上,但是jbutton从哪里来呢 这是我的主课Java 每次我按下滚动按钮,它都会留下滚动按钮的图片,java,swing,actionlistener,Java,Swing,Actionlistener,我想做一个蛇和梯子的游戏。它还没有完成(没有交换回合,没有使用梯子和蛇),并且有很多bug 但我的观点是 我发现了一个让我非常好奇的问题(下图)。这是一个象征性的举动。我的策略是在一个大的JPanel(我将其命名为Board)上添加一个[10][10]JPanal数组(我将其命名为class),我将其背景设置为google提供的蛇和梯子游戏的图片,并将布局设置为gridlayout(10,10)。在每个单元格上都有一个隐藏的标记,只有当按下滚动按钮并将输出点指向该单元格时才会显示 这就是问题发生
public class Main extends JFrame {
TextField text = new TextField();
Dice dice = new Dice();
int tempi = -1, tempj = -1,sum =0;
//Main Method
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Main mPage = new Main();
mPage.setVisible(true);
}
});
}
//Constructor
public Main(){
super("Snakes and Ladders");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(1280,768);
setLocation(400,150);
setLayout(new FlowLayout(FlowLayout.LEFT,30,100));
Board board = new Board();
getContentPane().add(board);
getContentPane().add(dice);
getContentPane().add(text);
//my problem is here.
dice.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int score = Dice.rollDice();
text.setText(String.valueOf(score));
if (tempi != -1 || tempj != -1){
board.cell[9-tempi][9-tempj].fade();
}
if (tempi == -1 && tempj == -1){
sum = sum + score - 1;
}
else sum = sum + score;
tempj = sum%10;
tempi = (sum - tempj)/10;
board.cell[9-tempi][9-tempj].reveal();
}
});
pack();
setMinimumSize(this.getSize());
}
}
这是细胞级
public class Cell extends JPanel implements Cloneable {
private Token pl1 = new Token();
//constructor
public Cell(){
setOpaque(true);
setBackground(new Color(0,0,0,0));
setLayout(new GridLayout(2,2));
this.fade();
this.add(pl1);
}
public void fade(){
pl1.setVisible(false);
}
public void reveal(){
pl1.setVisible(true);
}
}
这是令牌类
public class Token extends JLabel {
private BufferedImage image = null;
public Token(){
try {
image = ImageIO.read(new File("C:\\Users\\myacc\\IdeaProjects\\Snakes and Ladders\\src\\Token.png"));
} catch (IOException e) {
e.printStackTrace();
}
Image player = image.getScaledInstance(20,20,Image.SCALE_SMOOTH);
this.setIcon(new ImageIcon(player));
}
}
不要使用透明的背景。Swing不知道如何正确绘制透明背景
要实现完全透明,只需将组件设置为非不透明:
//setOpaque(true);
//setBackground(new Color(0,0,0,0));
setOpaque(false);
如果您需要半透明度,那么您需要自己进行自定义绘制。有关此主题的更多信息,请查看
也不要使用文本字段。这是一个AWT组件。使用JTextField
,它是Swing组件
不要使用透明的背景。Swing不知道如何正确绘制透明背景
要实现完全透明,只需将组件设置为非不透明:
//setOpaque(true);
//setBackground(new Color(0,0,0,0));
setOpaque(false);
如果您需要半透明度,那么您需要自己进行自定义绘制。有关此主题的更多信息,请查看
也不要使用文本字段。这是一个AWT组件。使用JTextField
,它是Swing组件