1

私は5つのJButtonを持っています:b1、b2、b3、b4、b5。デフォルトでは、それらの色は灰色です。いずれかのボタンをクリックすると、そのボタンの背景が白に変わります。別のボタンをクリックすると、前にクリックしたボタンで背景を灰色に変更し、この新しくクリックしたボタンで背景を白に変更します。これが私が書いたコードです:

int liveButton = 0; //holds the value of the button that is last clicked.
//0 indicates no button clicked (in the beginning)

private void ChangeInUsersList(int clickedButton) {
    switch(liveButton) {
        case 1 : b1.setBackground(Color.GRAY);
                 break;
        case 2 : b2.setBackground(Color.GRAY);
                 break;
        case 3 : b3.setBackground(Color.GRAY);
                 break;
        case 4 : b4.setBackground(Color.GRAY);
                 break;
        case 5 : b5.setBackground(Color.GRAY);
                 break;
        default: System.out.println("No button to change");
    }
    liveButton = clickedButton;// store the clicked button to change its
    //background later
}
private void b1ActionPerformed(java.awt.event.ActionEvent evt) {
    ChangeInUsersList(1);
    b1.setBackground(new java.awt.Color(255,255,255));
}

private void b2ActionPerformed(java.awt.event.ActionEvent evt) {
    ChangeInUsersList(2);
    b2.setBackground(new java.awt.Color(255,255,255));
}

private void b3ActionPerformed(java.awt.event.ActionEvent evt) {
    ChangeInUsersList(3);
    b3.setBackground(new java.awt.Color(255,255,255));
}

private void b4ActionPerformed(java.awt.event.ActionEvent evt) {
    ChangeInUsersList(4);
    b4.setBackground(new java.awt.Color(255,255,255));
}

private void b5ButtonActionPerformed(java.awt.event.ActionEvent evt) {
    ChangeInUsersList(5);
    b5.setBackground(new java.awt.Color(255,255,255));
}

ただし、期待どおりに機能していません。ボタンをクリックすると、背景が白に変わります。ただし、その後、他のボタンをクリックしても、前のボタンの背景は灰色に変わりません。Color.GREYを新しいjava.awt.Color(236,233,216)に置き換えてみました-灰色のrgbですが、それでも機能しません。

4

4 に答える 4

2

ボタンに色を付けてから、色を元のデフォルト状態(システムグレー)に戻す必要がある場合は、次を使用します。

button.setBackground(null);

これにより、以前の色設定が削除されます。

(いくつかのボタンをクリックする必要があるアプリケーションがあり、クリックしたボタンを追跡し、機能を実行したら、それらを「クリック解除」します。トグルボタンを使用することもできますが、この1行は次のように変更されます。この機能を追加するのは、コンポーネントアレイ全体を変更するよりも簡単でした。さらに、UIの「感触」は正しいです。)

于 2012-09-24T15:12:21.320 に答える
1

何をしたいのか正確に説明してください。

あなたが書いたものから、一度に1つのボタンだけを選択しようとしていることがわかります。その場合は、JButtonをJToggleButtonに置き換えて、1つのButtonGroupに配置します。例(擬似コード):

//[...]
JToggleButton button2 = new JToggleButton(...)
//[...]
ButtonGroup group = new ButtonGroup();
//[...]
group.add(button2);
//[...]

それ以外の場合、ボタンの背景色を本当に変更したい場合:

private List<JButton> buttons;
private JButton b1, b2, b3, b4, b5;
private void initButtons()
{
   buttons = new ArrayList<JButton>(5); // new List to "save" Buttons in
   buttons.add(b1 = new JButton());
   // etc etc ...
   buttons.add(b5 = new JButton());
}

public void setActiveButton(JButton button)
{
   for(JButton b : buttons)
   {
      b.setBackgroundColor(Color.GREY);
   } 
   button.setBackgroundColor(Color.WHITE);
}

private void b1ActionPerformed(java.awt.event.ActionEvent evt) 
{
   setActiveButton(b1);
   // or to be more "generic"
   // setActiveButton((JButton) evt.getSource());
}
于 2010-04-11T18:09:28.753 に答える
0

「liveButton」変数を宣言した後、次の行を追加して修正しました。

Color buttonColor = b1.getBackground();

その後、ChangeInUsersList関数内で、「Color.GRAY」をbuttonColorに置き換えました。そしてそれはうまくいきました:)

于 2010-04-11T17:40:52.763 に答える
0

ボタンにはsetBackground()、、の両方が必要です。setContentAreaFilled(false)setOpaque(true)

于 2017-03-23T08:23:02.337 に答える