2016-10-26 83 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

我猜你會需要使用<opaque value="true" />作畫JButton的背景:

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

三江源的解。有效。 –