Java synth - 如何将纯色应用于按钮背景

标签 java swing synth

我正在尝试使用 Java 中的 synth xml 获取简单的平面按钮。此按钮应包含纯色背景和没有其他效果的文本。

我已经检查了一些教程并成功实现了以下解决方案,我需要为按钮提供纯色背景图像。

    <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>

任何人都可以检查并帮助我找出我犯的错误或者有任何其他解决方案吗?

最佳答案

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

按钮.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);
    });
  }
}

关于Java synth - 如何将纯色应用于按钮背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40260950/

相关文章:

java - Tomcat : Context path not being set

java - 添加新元素后,带有自定义 CellRenderer 的 Swing JList 消失

java - 如何在别处绘制不可见的 JFrame?

java - 如何为 JTabbedPane 中的选项卡设置准确的样式?

java - 使用 Java ProcessBuilder 运行具有多个参数的 Windows .exe 文件不会按预期生成任何输出文件

java - 在 replaceAll 的正则表达式中使用 NOT

java - JPanel 使用 mouseMoved 方法闪烁

java - IntelliJ : cannot resolve symbol "setVisible"

Java-LAF : How to create Decoration using Synth-XML?

java - 无法使用 Synth 更改 ScrollBar 的颜色