質問

Java デスクトップ アプリケーションを開発しています。その中に4つあります JButtonsJPanel. 。ここで、ボタンがクリックされるたびに、その背景色が他の色(オレンジ色など)に変わり、クリックされたことを表し、他の3つのボタンすべての背景色がデフォルトの色にリセットされるようにしたいと思います(いずれかがオレンジ色だった場合)背景色)。

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

私が適用した現在のアプローチは、次のコードを xxxActionPerformed() JButton button1 のメソッド

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

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

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

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

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

役に立ちましたか?

解決

  1. ただ使ってください null デフォルトの色を使用するには:

    button1.setBackground(Color.ORANGE);
    button2.setBackground(null);
    ...
    
  2. ButtonGroup で JToggleButtons を使用することを検討し、ボタンの Icon と 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);
    ...
    

他のヒント

あなたはUIManagerからボタンの標準の背景色を取得することができます

button1.setBackground(UIManager.getColor("Button.background"));
私の知る限りでは、キーが異なるルックアンドフィールに変更することができます。ここでは素敵なのWebStartのアプリがあることを示しているすべての使用可能なキー:

http://tips4java.wordpress.com/2008/10/09 / UIManagerの-デフォルト/

これをベースにした「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: com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel$NimbusProperty@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]

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:私はボタンをグループ化について聞いたことがありません。その後、私はあなたに、このいずれかを答えるcan'tます。

希望、それは助けています。

あなたがあなたの全体のボタンの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));

これは私がそれを使用する方法..あなたもあなた自身の方法を持つことができます。

あなたはそれがホバー場合ボタンは、例えば、現在アクティブであるか否かに応じて、それを飾る方法にボタンを渡すJavaでDecoratorパターンに見えた。

public Jbutton decorateButton(JButton b, boolean isHoveredOver){
    if(isHoveredOver)
        b.setBackground(getContentPane().getBackground().GREEN);
    return b;
}
あなたはMouseEventのかのActionEventメソッドからこのメソッドを呼び出すと、直後に()の再描画を発行します。 trueに設定したイベントに、それはdecorateButtonメソッドにそれぞれ1を渡して、配列やベクトルとループにすべてのボタンを入れて、偽のしてinitailブール値を与えます。 この方法では、初期値は、デフォルトで、ボタンは、アクション時に飾られているボタンはグループ

の一部として機能しているように見えます
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top