2012-10-13 131 views
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; 

進口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等是在一個單獨的類,但我沒有發佈他們,因爲代碼是不相關的在我看來,第二部分..我必須給worp DobbelSteen的構造函數? – Reshad

+0

號你爲什麼要這樣做?主要的方法和JFrame可能是相關的。如果你在屏幕上看到一個骰子,它是另一個實例,創建並添加到其他位置,而不是由worp按鈕滾動的實例。爲了使它更清晰:你有兩個死亡:一個是永不變化的可見死亡,另一個是不可見死亡,是由worp按鈕滾動的死亡。 –

+0

我已經添加了JFrame類。在這一刻,DobbelSteen的構造函數在程序啓動時創建第一個拋出,所以實際上我必須藉助右鍵重新啓動構造函數?或者是過度殺傷? (p.s. with 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 =新的Worp(dobbelsteenNaam);並將容器也添加到容器中。我不確定如果你的repaint()調用是在正確的地方。

相關問題