안녕하세요. 저는 자바로 죽었습니다. (아주 간단합니다.) 이제 앱을 시작할 때 1에서 6 사이의 임의의 값으로 아주 좋은 다이를 얻었습니다. 다시 버튼을 던지면 (클래스가 리콜되지 않았거나 뭔가), 누군가 내가 잘못한 것을 말할 수 있기를 바랍니다. 당신이다른 클래스의 수업 불러 오기
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 등은 별도의 클래스에 있지만 두 번째 부분에 대한 코드가 내 의견으로는 관련이 없기 때문에 게시하지 않았습니다. DobbelSteen의 생성자에 worp를 주어야합니까? – Reshad
아니, 왜 그랬습니까? 주요 메소드와 JFrame은 아마도 관련성이 있습니다. 화면에 금형이 보이면, 다른 버튼이 튕겨내는 것보다 다른 곳에서 생성되고 추가 된 또 다른 인스턴스입니다. 더 명확하게하기 위해서 : 당신은 두개의 죽을 가지고 있습니다 : 하나는 결코 바뀌지 않는 보이는 주사위이고, 다른 하나는 보이지 않는 주사위입니다. –
JFrame 클래스를 추가했습니다. 이 순간에 DobbelSteen의 생성자가 프로그램이 시작될 때 첫 번째 던지기를 만듭니다. 사실 저는 버튼의 도움으로 생성자를 다시 시작해야합니다. 아니면 과잉 살인입니까? (p.s. system.out.println (val)와 함께 매번 변경되는 주사위 값을 볼 수 있지만 화면에는 아무것도 표시되지 않습니다. – Reshad