2016-10-26 6 views
1

Javaでsynth xmlを使用して単純なフラットボタンを取得しようとしています。このボタンには、単色の背景とテキストが含まれ、他の効果はありません。Javaシンセ - ボタンの背景にソリッドカラーを適用する方法

私はいくつかのチュートリアルを確認し、ボタンのための単色の背景画像を提供する必要があるソリューションの下でうまく実装しました。

<state> 
     <imagePainter method="buttonBackground" path="images/button_press.png" sourceInsets="10 10 10 10"/> 
     <font name="Dialog" size="16"/> 
     <color type="TEXT_FOREGROUND" value="#FFFFFF"/> 
    </state> 

しかし、シンセのドキュメントhereごとに私の代わりに画像を使用してのボタンに背景色を提供することができるはずです。私は同じのXML設定の下で試してみました。しかし、ボタンに背景を適用していません。それはテキストに与えられた色を適用しています。

<state> 
     <font name="Verdana" size="14"/> 
     <color value="#FF0000" type="BACKGROUND"/> 
     <color value="#000000" type="TEXT_FOREGROUND"/> 
    </state> 

私が行った間違いを誰かが確認して助けてくれますか、それとも他の解決策がありますか?

答えて

3

私はあなたがJButtonの背景をペイントする<opaque value="true" />を使用する必要があります推測するための:

button.xml

<synth> 
    <style id="default"> 
    <font name="Dialog" size="16" /> 
    </style> 
    <bind style="default" type="region" key=".*" /> 

    <style id="ButtonTest"> 
    <opaque value="true" /> 
    <insets top="10" bottom="10" left="10" right="10" /> 
    <state> 
     <font name="Verdana" size="14" /> 
     <color type="BACKGROUND" value="#FF0000" /> 
     <color type="TEXT_FOREGROUND" value="#000000" /> 
    </state> 
    <state value="MOUSE_OVER"> 
     <color type="BACKGROUND" value="ORANGE" /> 
     <color type="TEXT_FOREGROUND" value="WHITE" /> 
    </state> 
    <state value="PRESSED"> 
     <color type="BACKGROUND" value="GREEN" /> 
     <color type="TEXT_FOREGROUND" value="WHITE" /> 
    </state> 
    </style> 
    <bind style="ButtonTest" type="region" key="Button" /> 
</synth> 

SynthButtonTest.java

import java.awt.*; 
import javax.swing.*; 
import javax.swing.plaf.synth.*; 

public class SynthButtonTest { 
    public JComponent makeUI() { 
    JPanel p = new JPanel(); 
    p.add(new JButton("JButton1")); 
    p.add(new JButton("JButton2")); 
    p.add(new JButton("JButton3")); 
    return p; 
    } 
    public static void main(String... args) { 
    EventQueue.invokeLater(() -> { 
     try { 
     Class<?> c = SynthButtonTest.class; 
     SynthLookAndFeel synth = new SynthLookAndFeel(); 
     synth.load(c.getResourceAsStream("button.xml"), c); 
     UIManager.setLookAndFeel(synth); 
     } catch (Exception ex) { 
     ex.printStackTrace(); 
     } 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     f.getContentPane().add(new SynthButtonTest().makeUI()); 
     f.setSize(320, 240); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    }); 
    } 
} 
+0

ありがとう溶液。出来た。 –

関連する問題