问题标签 [synth]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3786 浏览

java - Java L&F 自定义:如何使用 synth 自定义 BorderFactory 边框?

具体来说,我目前有一个带有 TitledBorder 的 JPanel。我想自定义边框的外观。在我的应用程序的当前状态下,绘制的是标题,而不是线条边框本身。

如果我将 imagePainter 绑定到 Panel 对象的 panelBorder 方法,我可以在面板周围放置一个自定义图像——但是它只显示在那些我没有在代码中明确设置边框的面板上。这是该代码的样子:

我该如何做相反的事情——也就是说,让这个自定义图像只显示在我应用了 TitledBorder 的面板上?

我也尝试过使用命名面板:

和名称绑定:

这使我可以仅更改特定面板的样式,这很好。但是,它并没有解决原来的问题:我仍然无法自定义面板的 NamedBorder。

如果我指定 NamedBorder,我的 PanelBorder 画家将被忽略,只打印名称。如果我拿走我的 NamedBorder,我可以使用我的自定义边框图形,但是我必须戳我的布局以在标题之前所在的同一位置获得一个 JLabel,这是不可取的。

进一步的研究发现,没有渲染线的原因是 TitledBorder 的构造函数接受了另一个 Border 的参数,除了标题之外它还渲染了该参数。我没有传递这个参数,默认值取决于您选择的 L&F。当我使用系统 L&F 时,默认是 LineBorder。显然 Synth 的默认值是 EmptyBorder。显式指定 LineBorder 可以让我返回线,这解决了我的大部分问题。

我剩下的问题涉及为 LineBorder 使用自定义图形。现在,我通过将我的自定义图形渲染为第二个 PanelBackground 图像来获得——它被合成在实际背景之上并实现了所需的视觉效果,尽管它不是理想的实现。

0 投票
2 回答
1261 浏览

java - Synth LaF JLabel 禁用颜色

使用 Synth LaF,我无法为 DISABLED 状态设置 JLabel 的 FOREGROUND 颜色。有没有人成功做到这一点?这是我的 LaF.xml 文件中标签的样式定义。

请不要让我的 LaF.xml 文件中定义的所有其他样式在我的应用程序中正确呈现,包括我的标签的白色正常状态颜色(当我执行 lbl.setEnabled(false) 时它永远不会变黑

另外,通过 Synth 代码,我在 SynthStyle.getColor 中找到了以下注释

但我不知道如何为 JLabel 设置禁用颜色

谢谢你的帮助!

0 投票
1 回答
11341 浏览

java - 如何更改 JComboBox 中的箭头样式

假设我想为 JComboBox 中的箭头使用自定义图像,我该怎么做?

我知道可以使用合成器 xml 文件,甚至 UIManager.put(...),但我不知道如何。此时我想要做的就是将箭头图像更改为其他内容,以编程方式或什至只是覆盖它使用的图像。我该怎么做?

0 投票
1 回答
627 浏览

java - 用于自定义 Synth 外观的插图

我正在为我的应用程序使用 Synth 实现自定义外观 - 基本上提供 SynthStyle、SynthPainter 和 SynthStyleFactory 的自定义版本。

没有使用任何 XML,即一切都是通过 Java API 完成的。一般来说,这工作得很好。

然而,设置适当插图的最佳方法有点棘手。我可以看到各种选项:

  • 覆盖 SynthStyle 的 getInsets 以返回每个区域的特定插图
  • 使用 SynthStyle.installDefaults 为组件应用边框
  • 将所有插图设置为 (0,0,0,0) 并在绘画方法中进行补偿
  • 创建新的 ComponentUI 委托

什么是最好的方法,为什么?

0 投票
1 回答
981 浏览

java - 控制自定义合成器外观中的复选框布局

我正在尝试使用 Synth 实现自定义的“Steampunk”主题外观 - 基本上提供了 SynthStyle、SynthPainter 和 SynthStyleFactory 的自定义版本。

我没有使用任何 XML,即一切都是通过 Java API 完成的。一般来说,这工作得很好,实际上开始看起来相当不错。

但是,我遇到了一些“复合”组件,例如 JCheckBox。当在 SynthPainter 上调用 paintCheckBoxBackground() 时,坐标指的是 JCheckBox 覆盖的整个区域。

我应该如何确定在该区域的哪个位置需要分别绘制复选框图标和文本?

0 投票
1 回答
286 浏览

java - Synth LaF 不同的面板样式

我有一个带有两个 JPanel 的应用程序,它们必须具有不同的样式。我使用 Synth LaF,但我不知道如何在一个 xml 文件中有两种不同的样式。我定义了一种样式并将其绑定到“面板”,但两个面板看起来很相似。是否有可能定义更多样式并让合成器知道它应该在哪个面板上使用哪个样式?

0 投票
1 回答
741 浏览

java - 将合成器外观应用到滑块?

我有一堆滑块,我正在尝试对其应用自定义拇指。它的尺寸是 12x20,我使用合成器外观和下面的代码来应用它。这会正确显示水平滑块的拇指,但是一旦我制作垂直滑块,拇指就会在边缘变形。有没有更好的方法来做到这一点?另外,拇指按下的代码没有做任何事情,我认为原因是sliderThumbs没有“按下状态”?有没有办法在按下滑块时改变 L&F?先谢谢了!!!

干杯,卢卡斯

0 投票
1 回答
1705 浏览

java - Java Synth:JTabbedPane 和 SynthGraphicsUtils 的问题

在我的 Java 应用程序中,我有一个 JTabbedPane 和一个合成器外观。l&f 由 xml 文件定义。这对我来说很好。

现在的挑战是:我希望 JTabbedPane 选项卡中的文本垂直书写,而不是水平书写。为此,我将 SynthGraphicsUtils 子类化并重写了方法 paintText(SynthContext ss, Graphics g, String text, int x, int y, int mnemonicIndex)。这也有效。

现在的问题:不同选项卡中的文本垂直显示,但每个选项卡的大小似乎计算错误。选项卡未正确分离。不幸的是,我不允许发布图片......标签相互重叠。

我不知道如何解决这个问题:-(这是我的代码:

SwingTest.java

拉夫.xml

MySynthGraphicsUtils.java

}

非常感谢你!!

0 投票
2 回答
1137 浏览

java - Java MIDI Synthesizer .jar 不播放

我写了一个简单的合成器 gui,它在我的机器上运行良好。但是,一旦我将其放入 jar 文件中,执行该 jar 文件时它就不再播放声音。我认为这与音库有关。无论哪种方式,当我运行 jar 文件时,我都无法让它在我的机器上播放音符,所以我认为它不会在其他人的机器上运行。关于可能发生的事情有什么想法吗?谢谢。

-马特

0 投票
3 回答
505 浏览

java - 如何调试 Swing 中发生的不必要的重绘

在我正在开发的 Swing 应用程序中进行重新绘制时,我遇到了一些奇怪的问题。我发现当我设置某个组件的文本(它只是窗口最底部的状态栏文本标签)时,屏幕非常不同区域的整个表格被告知重新绘制。这会导致一些性能问题,因为每次我设置状态栏文本时,基本上整个窗口都被要求重新绘制。

我一直在 RepaintManager 周围徘徊,试图弄清楚发生了什么,并发现当我尝试设置此文本的标签时,我的整个主 JPanel 都被标记为脏组件。但是,我在调试发生的时间点以及发生这种情况的确切原因时遇到了麻烦。我试图阅读重绘系统,但我无法确定为什么在设置其他文本标签时需要对非重叠表进行重绘。

我使用 Swing Explorer 尝试可视化布局边​​框,以确保事物不会以某种疯狂的方式重叠,并且一切看起来都很好。

我正在寻找一种方法来确定要求 JTable 重新绘制的调用顺序。当我在它的paintComponent() 上添加一个断点并沿着堆栈向上走时,我最终进入了RepaintManager 的paintDirtyRegions() 调用,其中我的整个主JPanel(包含窗口中的所有内容)都位于tmpDirtyComponents 变量中。

当我最初只是设置一个状态文本标签时,谁能解释我的整个 JPanel 是如何被标记为脏的?如果没有,您能否提供一些关于在哪里找到错误的指导?

非常感谢您提供的任何帮助!