2011-02-08 7 views
0

この単純なGUIを作成しようとしていますが、クリック数がボタンに表示され、クリックごとに増分されるため、ボタンが1つ右に回転します。現時点ではGUIが作成されていますが、バックグラウンドは設定されておらず、何かをクリックすると何も起こりません。私はここで問題を見つけることはできないようです。誰にも見える?これであなたの助けのためのJava GUIが作成されていますが、イベントが何もトリガーしていません

どうもありがとう:)

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


public class ButtonJava extends JButton implements ActionListener { 
    private static int currentColor=0; 
    private int clicks; 
    private static final Color[] COLORS = { 
    Color.ORANGE, 
    Color.WHITE, 
    Color.GREEN }; 

    public ButtonJava(){ 
    setBackground(Color.YELLOW); 
    setText("Pick ME"); 
    this.addActionListener(this); 
    } 

    public static void main(String[] args) { 
    JFrame frame = new JFrame ("JFrame"); 
    JPanel panel = new JPanel(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JButton buttons[] = new JButton[3]; 
    for(int i = 0;i<buttons.length ; i++){ 
     buttons[i] = new ButtonJava(); 
     panel.add(buttons[i]); 
    } 
    frame.getContentPane().add(panel); 
    frame.setSize(500, 500); 
    frame.setVisible(true); 
    } 

    private void updateButton() { 
    changeColors(); 
    clicks++; 
    setText("# of clicks = " + Integer.toString(clicks)); 
    } 

    private void changeColors() { 
    for (int i=0;i<COLORS.length;i++){ 
     setBackground(COLORS[currentColor]); 
     currentColor %=2; 
    } 
    } 

    @Override 
    public void actionPerformed(ActionEvent event) { 
    updateButton(); 
    } 


} 
+0

ああ、今私の最初の間違いを修正しましたが、changeColors()の呼び出しを間違って実装しました.3つすべてのボタンではなく1つのボタンの色を変更しています。誰でも助けてくれますか? – user476033

+1

@ user476033:各 'ButtonJava'オブジェクトは自分自身のコントロールしか持っていません。つまり、ボタンの1つをクリックするとそのボタンだけが色を変えます。ボタンの1つをクリックしてすべてのボタンの色を変更したい場合は、各ボタンのコンストラクタに他のボタンを用意し、 'changeColor'をそれぞれ' setBackground'を呼び出さなければなりませんボタン。 –

+0

@shakedown:「各ボタンのコンストラクタに他のボタンを用意しなければならない」と言ったら、これはどういう意味ですか?これをどうやってやりますか? – user476033

答えて

1

単純なミス - あなたはJButtonを使用している、あなたのカスタムボタンクラスを作成していません。
変更するには、次の行:
buttons[i] = new JButton("Pick Me");
へ:main
buttons[i] = new ButtonJava();

0

、あなたが通常のJButton Sを作り、私はあなたの代わりにButtonJavaを追加することを意味を推測するとき、あなたのUIにそれらを追加しています。

0

は、それはすべきではない:

ButtonJava buttons[] = new ButtonJava[3]; 
for(int i = 0;i<buttons.length ; i++){ 
    buttons[i] = new ButtonJava(); 
    panel.add(buttons[i]); 
} 

関連する問題