2016-11-25 19 views
0

私はユーザーがトグルボタンを使用して座席を予約できるように、JavaスイングでGUIを作成しようとしています。 Clickイベントが機能しているかどうかをテストするために、最初はデフォルトのボタンカラーがあります。ボタンは予約済みであることを示すために赤色になり、未予約であることを示すために黄色に変わります。JavaスイングのJToggleButtonはisSelected()メソッドを認識しませんか?

はここ

@Override 
public void actionPerformed(ActionEvent e) { 
    GoldSeat seat = (GoldSeat)e.getSource(); 
    if(seat.isSelected()){ 
     seat.setBackground(Color.red); 
    } 
    else 
    { 
     seat.setBackground(Color.yellow); 
    } 
} 

GoldSeatは、単にJToggleButtonの派生クラスである私のactionPerformedメソッドです。何らかの理由で、ボタンをクリックすると、赤色に変わらず(デフォルトの灰色に変わります)、もう一度クリックすると黄色に変わります。つまり、ボタンの「真」または「オン」の状態は機能していないように見えますが、「偽」があります。なぜisSelected()が正しく機能していないのかわかりません。

これを解決する方法はありますか?

編集:私は簡単なドラッグを使用して、その上に1 JToggleButtonとともに迅速たJFrameを投げ、このコードを生成Netbeansののインタフェースをドロップ:

jToggleButton1 = new javax.swing.JToggleButton(); 
jToggleButton1.setText("jToggleButton1"); 
    jToggleButton1.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jToggleButton1ActionPerformed(evt); 
     } 
    }); 

とアクションイベント:

private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {            
    if(jToggleButton1.isSelected()){ 
     jToggleButton1.setBackground(Color.red); 
    }else { 
     jToggleButton1.setBackground(Color.yellow); 
    } 
} 

これは私が何をしたいのかを実行しますが、上に投稿した派生クラスで再作成することはできません。私自身のコードで何か間違っているのですか?

+0

'私は私自身に何かをしていますコード? ' - 多分間違っていないかもしれないが、違う。私はすでにこれがLAFの問題だと提案しました。おそらく、2つのフレームが別のLAFを使用していますか?いずれにしても、コードのいくつかのランダムな行に基づいて、間違っていることを判断することはできません。 – camickr

答えて

2

トグルボタンが選択されている場合、LAFはカスタムペインティングを行います。そのため、背景を設定しても効果はありません。

UIManagerを使用してこの動作を制御できる場合があります。あなたが試すことができます任意のトグルボタンを作成する前に:

UIManager.put("ToggleButton.select", Color.RED); 

これは、すべてのトグルボタンのプロパティを変更します。

編集:

あなただけ(それがうまくいくかどうかわからない)あなたが試すことができ、単一のトグルボタンのために、この機能が必要な場合のようなもの:

Color select = UIManager.getColor("ToggleButton.select"); 
UIManager.put("ToggleButton.select", Color.RED); 
JToggleButton button = new JToggleButton(...); 
UIManager.put("ToggleButton.select", select); 
+0

私は本当に個々のボタンで動作する必要があります。私は、1つのJToggleButtonを備えた簡単なJFrameを作成し、それを私が望むように動作させることができましたが、何らかの理由でメインコードで動作しません。 編集:あなたの編集を見ただけです。私はそれを試して、それがどうなるかを見る –

+0

@ MarkO'Hare、編集を参照してください。さらに質問がある場合は、あなたが試したことを示す[mcve]を投稿してください。 – camickr

+0

その解決策は結局私のために働いた!ご協力いただきありがとうございます! –

関連する問題