0

こんにちは、Java でダイスを作成しました (非常に単純です)。アプリを起動すると、1 から 6 までのランダムな値を持つ非常に素晴らしいダイスが表示されます。機能しないのは、もう一度投げるボタンだけです (クラスのように)リコールされていないか何か)、誰かが私が間違ったことを教えてくれることを願っています. 以下に私の2つのクラスがあります

throwbutton アクション クラス:

package h05Dobbelsteen;

import java.awt.event.*;
import javax.swing.*;

public class Worp extends JPanel implements ActionListener {

private JButton worp;

DobbelSteen dobbelsteen;

public Worp() {

    dobbelsteen = new DobbelSteen();
    worp = new JButton("Werp de dobbelsteen");
    worp.addActionListener(this);

    add(worp);

}

@Override
public void actionPerformed(ActionEvent e) {

    dobbelsteen.roll();

}

}

私のダイクラスは次のとおりです

package h05Dobbelsteen;

import java.awt.*;

javax.swing.JPanel をインポートします。

public class DobbelSteen extends JPanel {

private final static int SPOT_DIAMETER = 40; // diameter dobbelsteen rondjes
private int faceValue; // getoonde waarde op scherm

public DobbelSteen() {

    roll();

}

/*
 * roll de dobbelsteen
 */
public int roll() {

    int val = (int) (6*Math.random() + 1); // bepaal getal tussen 1 - 6
    setValue(val);
    return val;

}

/*
 * set de waarde van de roll
 */
public void setValue(int spots) {
    faceValue = spots;
    repaint();
}

/*
 * get de waarde van de roll
 */
public int getValue() {
    return faceValue;
}

/*
 * teken de view van de dobbelsteen
 */
public void paintComponent(Graphics g) {

    int w = getWidth();  // Get height and width
    int h = getHeight();

    // Graphics naar 2d
    Graphics2D g2 = (Graphics2D)g;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);

    //... Paint background
    g2.setColor(Color.WHITE);
    g2.fillRect(0, 0, w, h);
    g2.setColor(Color.BLACK);

    g2.drawRect(0, 0, w-1, h-1);  // Draw border

    switch (faceValue) {
        case 1:
            drawSpot(g2, w/2, h/2);
            break;
        case 3:
            drawSpot(g2, w/2, h/2);

        case 2:
            drawSpot(g2, w/4, h/4);
            drawSpot(g2, 3*w/4, 3*h/4);
            break;
        case 5:
            drawSpot(g2, w/2, h/2);
        case 4:
            drawSpot(g2, w/4, h/4);
            drawSpot(g2, 3*w/4, 3*h/4);
            drawSpot(g2, 3*w/4, h/4);
            drawSpot(g2, w/4, 3*h/4);
            break;
        case 6:
            drawSpot(g2, w/4, h/4);
            drawSpot(g2, 3*w/4, 3*h/4);
            drawSpot(g2, 3*w/4, h/4);
            drawSpot(g2, w/4, 3*h/4);
            drawSpot(g2, w/4, h/2);
            drawSpot(g2, 3*w/4, h/2);
            break;
    }
}

/*
 * Teken de spots
 */
private void drawSpot(Graphics2D g2, int x, int y) {
    g2.fillOval(x-SPOT_DIAMETER/2, y-SPOT_DIAMETER/2, SPOT_DIAMETER, SPOT_DIAMETER);
}

}

JFrame クラス

package h05Dobbelsteen;

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.*;

public class startDobbelsteen {

JFrame frame = null;

public startDobbelsteen() {

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBackground(Color.white);
    frame.setTitle("Dobbelsteen");
    frame.setBounds(200, 200, 450, 450);

    DobbelSteen dobbelsteen = new DobbelSteen();
    frame.add(dobbelsteen, BorderLayout.CENTER);

    Worp worp = new Worp();
    frame.add(worp, BorderLayout.SOUTH);

    frame.setVisible(true);

}

}
4

2 に答える 2

1
    DobbelSteen dobbelsteen;

    public Worp(DobbelSteen ds) {

        dobbelsteen = ds;
        worp = new JButton("Werp de dobbelsteen");
       worp.addActionListener(this);

        add(worp);

    }

    @Override
    public void actionPerformed(ActionEvent e) {

        dobbelsteen.roll();

    }

    }

これを試すことができます。JFrame クラス コンストラクターで DobbelSteen を 1 つ作成し、コンテナーに追加します。次に、ワープ worp = new Worp(dobbelsteenNaam); を実行します。コンテナにもワープを追加します。repaint() 呼び出しが正しい場所にあるかどうかはわかりません。

于 2012-10-13T12:41:46.397 に答える
1

プログラムは完全ではありません (main メソッドも JFrame もありません) が、このプログラムには DobbelSteen インスタンスが表示されていません。表示されたボタン ( ) によってロールされた DobbelSteen は、worpどのパネルにも追加されないため、ロールしてもアプリケーションの外観は何も変わりません。

于 2012-10-13T12:13:50.557 に答える