你好,我在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;
進口java.awt中的*;
import javax.swing.JPanel;
公共類DobbelSteen擴展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);
}
}
主要的方法和Jframe等是在一個單獨的類,但我沒有發佈他們,因爲代碼是不相關的在我看來,第二部分..我必須給worp DobbelSteen的構造函數? – Reshad
號你爲什麼要這樣做?主要的方法和JFrame可能是相關的。如果你在屏幕上看到一個骰子,它是另一個實例,創建並添加到其他位置,而不是由worp按鈕滾動的實例。爲了使它更清晰:你有兩個死亡:一個是永不變化的可見死亡,另一個是不可見死亡,是由worp按鈕滾動的死亡。 –
我已經添加了JFrame類。在這一刻,DobbelSteen的構造函數在程序啓動時創建第一個拋出,所以實際上我必須藉助右鍵重新啓動構造函數?或者是過度殺傷? (p.s. with system.out.println(val)我看到骰子的值每次都改變,但我在屏幕上什麼都沒有得到) – Reshad