2012-10-13 4 views
0

안녕하세요. 저는 자바로 죽었습니다. (아주 간단합니다.) 이제 앱을 시작할 때 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); 

} 

} 

답변

1

이 프로그램은 완료되지 (더 주요 방법, 아니 JFrame의)입니다,하지만 당신은하지 않습니다 이 프로그램에서 DobbelSteen 인스턴스 으로 표시하십시오. 표시된 버튼 (worp)에 의해 굴러 진 DobbelSteen은 어떤 패널에도 추가되지 않으므로 롤링해도 응용 프로그램의 모양은 변경되지 않습니다.

+0

메인 메서드와 Jframe 등은 별도의 클래스에 있지만 두 번째 부분에 대한 코드가 내 의견으로는 관련이 없기 때문에 게시하지 않았습니다. DobbelSteen의 생성자에 worp를 주어야합니까? – Reshad

+0

아니, 왜 그랬습니까? 주요 메소드와 JFrame은 아마도 관련성이 있습니다. 화면에 금형이 보이면, 다른 버튼이 튕겨내는 것보다 다른 곳에서 생성되고 추가 된 또 다른 인스턴스입니다. 더 명확하게하기 위해서 : 당신은 두개의 죽을 가지고 있습니다 : 하나는 결코 바뀌지 않는 보이는 주사위이고, 다른 하나는 보이지 않는 주사위입니다. –

+0

JFrame 클래스를 추가했습니다. 이 순간에 DobbelSteen의 생성자가 프로그램이 시작될 때 첫 번째 던지기를 만듭니다. 사실 저는 버튼의 도움으로 생성자를 다시 시작해야합니다. 아니면 과잉 살인입니까? (p.s. system.out.println (val)와 함께 매번 변경되는 주사위 값을 볼 수 있지만 화면에는 아무것도 표시되지 않습니다. – Reshad

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을 만들어 컨테이너에 추가하십시오. 그렇다면 Worp worp = new Worp (dobbelsteenNaam); 컨테이너에 worp를 추가하십시오. 나는 당신의 재 칠하는 전화가 올바른 장소에 있다면 확실하지 않습니다.