gpt4 book ai didi

java - 调整内容 Pane 大小时,optel 会变大

转载 作者:行者123 更新时间:2023-12-02 03:32:40 26 4
gpt4 key购买 nike

当我调整内容 Pane 、面板的大小时,无论您如何调用它,我的变量 optel 通过将其拖动得更小或更大而变大?为什么会这样以及如何解决它?我正在制作荷兰“Ganzenbord”游戏。我还需要一个选项来表达;玩家 1 赌骰子,轮到玩家 2 扔骰子。

package Opdrachten;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.*;

public class spel extends JPanel {
private JButton knop;
private boolean geklikt;
private boolean player1, player2;
Random rand = new Random();
int waarde = rand.nextInt(6) + 1; // De plus een is zodat je geen 0 krijgt
int optel = 0;

public spel() {
setBackground(Color.WHITE);
knop = new JButton("Gooi!");
knop.addActionListener(new KnopHandler());
add(knop);

}

public void paintComponent(Graphics g) {
super.paintComponent(g);

if(geklikt) {
optel += waarde;
g.drawString("Je hebt " + waarde + " gegooid. Dit is totaal:" + optel, 100, 70);

if (waarde == 1) {
g.drawString("Je mag 1 vakje naar voren", 100, 90);
}
if (waarde == 2) {
g.drawString("Je mag 2 vakjes naar voren", 100, 90);
}
if (waarde == 3) {
g.drawString("Je mag 3 vakjes naar voren", 100, 90);
}
if (waarde == 4) {
g.drawString("Je mag 4 vakjes naar voren", 100, 90);
}
if (waarde == 5) {
g.drawString("Je mag 5 vakjes naar voren", 100, 90);
}
if (waarde == 6) {
g.drawString("Je mag 6 vakjes naar voren", 100, 90);
}
}

if (optel == 6) {
optel = 12;
g.drawString("Ga verder naar 12", 100, 120);
}
if (optel == 19) {
g.drawString("Sla een beurt over", 100, 120);
}
if (optel == 31) {
g.drawString("Wie hier komt moet er blijven tot een andere speler er komt. Degene die er het eerst was speelt dan verder.", 100, 120);
}
if(optel == 42){
optel = 39;
g.drawString("Terug naar 39", 100, 120);
}
if(optel == 52){
g.drawString("Drie beurten overslaan", 100, 120);
}
if(optel == 58){
optel = 0;
g.drawString("Terug naar het begin, opnieuw beginnen", 100, 120);
}
if(optel == 63){
g.drawString("Wie hier als eerste komt heeft gewonnen", 100, 120);
}
}

class KnopHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
geklikt = true;
waarde = rand.nextInt(6) + 1; // get another random number
repaint();

}
}

}

最佳答案

您的主要问题是您在 Swing 绘制方法(此处为 PaintComponent)中拥有程序逻辑和状态更改代码(此处为 optel += waarde;)。了解您无法完全控制何时或即使该方法被调用,它也会在任何组件重新调整大小或重新绘制期间被调用,因此您永远不应该在此方法中包含程序逻辑或状态更改代码。该代码在其他地方,并且paintComponent应该仅用于绘画。

我的猜测是 optel += waarde; 应该在您的 ActionListener 中,但因为我不知道您的程序在做什么,所以这只是一个猜测。

关于java - 调整内容 Pane 大小时,optel 会变大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37860832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com