JavaでJButtonの背景色を設定する方法は?

background-color java swing user-interface
JavaでJButtonの背景色を設定する方法は?

Javaデスクトップアプリケーションを開発しています。 その中には、「JPanel」に4つの「JButton」があります。 今、私はボタンがクリックされるたびに、その背景色がクリックされたことを表すために他の色(オレンジなど)に変わり、他のすべての3つのボタンの背景色がデフォルト色にリセットされるようにします背景色)。

したがって、一度にオレンジ色にできるボタンは1つだけです。

私が適用した現在のアプローチは、JButton button1の `xxxActionPerformed()`メソッドに以下のコードを実装したことです

button1.setBackground(Color.Orange);
button2.setBackground(Color.Gray);
button3.setBackground(Color.Gray);
button4.setBackground(Color.Gray);

残りの3つのボタンについても同様です。

実際には、背景色をグレー(クリックされていないボタン用)にしたくないのです。 代わりに、エンドユーザーのプラットフォームのルックアンドフィールに従って、背景色がGUIのルックアンドフィールに合わせて調整されるように、デフォルトの背景色が必要です。

Q1. デフォルトの背景色を取得するにはどうすればよいですか?

Q2. これはこれを行う正しいアプローチですか?ボタングループ内の4つのボタンすべてをグループ化して、一度に1つだけが指定されたプロパティを持つことができる他のメカニズムがありますか(ラジオボタンなど)?

  5  0


ベストアンサー

  1. デフォルトの色を使用するには、 `null`を使用します。

    button1.setBackground(Color.ORANGE);
    button2.setBackground(null);
    ...
  2. ButtonGroupでJToggleButtonsを使用することを検討し、アイコンを設定し、
    ボタンのPressedIcon。 背景色を変更する必要はありません。

button1 = new JToggleButton(new ImageIcon("0.jpg"));
button1.setSelectedIcon(new ImageIcon("1.jpg"));
button2 = new JToggleButton(new ImageIcon("0.jpg"));
button2.setSelectedIcon(new ImageIcon("2.jpg"));
...
ButtonGroup group = new ButtonGroup();
group.add(button1);
group.add(button2);
...

9


UIManagerからボタンの標準の背景色を取得できます。

button1.setBackground(UIManager.getColor("Button.background"));

私の知る限り、キーは異なるルックアンドフィールで変更される可能性があります。 利用可能なすべてのキーを表示する素敵なWebstartアプリを次に示します。

8


Q1 .:ボタンのGUIカラーを取得するには、これを行うだけです

button1.setBackground(Color.Orange);
button2.setBackground(java.awt.SystemColor.control);
button3.setBackground(java.awt.SystemColor.control);
button4.setBackground(java.awt.SystemColor.control);

このクラス(java.awt.SystemColor。*)を使用すると、ユーザーインターフェイスのすべての要素の色を取得できます。

Q2 .:グループ化ボタンについて聞いたことがありません。 それでは、これに答えることはできません。

それが役に立てば幸い。

1


このhttps://stackoverflow.com/questions/2085271/java-swing-a-list-of-all-uidefaults-properties/2086274#2086274 [例]に基づいた「Button.background」の断面を次に示します。

*** Metal javax.swing.plaf.metal.MetalLookAndFeel 636 entries
Button.background: javax.swing.plaf.ColorUIResource[r=238,g=238,b=238]

*** Nimbus com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel 1052 entries
Button.background: [email protected]60961dff

*** CDE/Motif com.sun.java.swing.plaf.motif.MotifLookAndFeel 550 entries
Button.background: javax.swing.plaf.ColorUIResource[r=174,g=178,b=195]

*** Mac OS X com.apple.laf.AquaLookAndFeel 705 entries
Button.background: com.apple.laf.AquaNativeResources$CColorPaintUIResource[r=238,g=238,b=238]

1


必要に応じて、ボタンUI全体を再設計できます

public class buttonUI extends javax.swing.plaf.basic.BasicButtonUI{

buttonUI(JButton b){
    b.setContentAreaFilled(false);
}

@Override
    public void paint(Graphics g,JComponent c){
             Graphics2D g2d = (Graphics2D) g;
             g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
             AbstractButton b = (AbstractButton) c;
             g2d.setFont(font.deriveFont(11f));
             Dimension d = b.getSize();
             FontMetrics fm = g2d.getFontMetrics();
             g2d.setColor(new Color(100,100,100));
             String caption = b.getText();
             int x = (d.width - fm.stringWidth(caption)) / 2;
             int y = (d.height + fm.getAscent()) / 2 - 2;
             g2d.drawString(caption, x, y);
        }   }

そしてあなたの主要なコードでは

jButton1.setUI(new buttonUI(jButton1));

この使用方法.. あなたも自分の道を持つことができます

0


Javaでデコレータパターンを調べた場合、ボタンが現在アクティブなボタンであるかどうかに応じて、たとえばボタンがホバリングした場合にボタンをメソッドに渡します。

public Jbutton decorateButton(JButton b, boolean isHoveredOver){
    if(isHoveredOver)
        b.setBackground(getContentPane().getBackground().GREEN);
    return b;
}

このメソッドをMouseEventまたはActionEventメソッドから呼び出して、後にrepaint()を発行するだけです。 すべてのボタンを配列またはベクターに配置し、それをループ処理してそれぞれをdecorateButtonメソッドに渡し、initailブール値falseを指定してから、イベントでtrueに設定します。 このように初期値はデフォルトであり、ボタンはアクション時に装飾され、ボタンはグループの一部として機能しているように見えます

-1


タイトルとURLをコピーしました