我需要一个带有两个旋钮的滑块(代表一个范围),我在这里找到了这个漂亮的。但是,他们创建了自己的 UI,它扩展了 Java 的BasicSliderUI。他们覆盖了paint方法来绘制自己的旋钮。我想使用基于当前外观的默认旋钮。我尝试调用BasicSliderUI的paintThumb方法,但这给了我一个通用的外观旋钮,它似乎与当前的外观和感觉无关。据我所知,JSlider从MultiSliderUI获取其 UI 。如何创建一个像JSlider一样变化的 UI ,但绘制两个旋钮而不是一个?
提前致谢!
有没有办法在Swing GTK LaF中更改默认字体大小?
GTK LaF似乎假定为72dpi,因此所有字体只有使用96dpi屏幕时应该是的大小的3/4.有关详细信息,请参阅此Fedora错误.我想在此期间找到一个解决方法,同时我等待修复.
我已经尝试过重置字体大小UIDefaults,例如,这里推荐的,但是(如前所述)GTK LaF似乎忽略了这一点.
我可以构建一个小部件工厂,它也可以设置所需的字体大小来创建我的所有Swing小部件,但这将是大规模侵入性的,所以如果有任何其他方式,我想避免使用该路径.
编辑:以下不起作用:
public class GTKLaF extends com.sun.java.swing.plaf.gtk.GTKLookAndFeel {
@Override
public UIDefaults getDefaults() {
final float scale = 3f;
final UIDefaults defaults = super.getDefaults();
final Map<Object,Object> changes = new HashMap<Object,Object>();
for (Map.Entry<Object,Object> e : defaults.entrySet()) {
final Object key = e.getKey();
final Object val = e.getValue();
if (val instanceof FontUIResource) {
final FontUIResource ores = (FontUIResource) val;
final FontUIResource nres =
new FontUIResource(ores.deriveFont(ores.getSize2D()*scale));
changes.put(key, nres); …Run Code Online (Sandbox Code Playgroud) 我一直在制作一个使用 JFileChooser 的程序。我已经设置了应用程序
UIManager.getSystemLookAndFeelClassName()
这对 Ubuntu 下的几乎所有东西都适用。到目前为止,我遇到的唯一问题是 JFileChooser 看起来非常糟糕:

有没有办法让它看起来像 Ubuntu 中的默认文件选择器?IE。

我试过使用
UIManager.getCrossPlatformLookAndFeelClassName()
这使得 JFileChooser 对话框看起来更好,但仍然不是本机外观,并且它也破坏了应用程序的其余部分的感觉。
谢谢。
我有一个VB6应用程序,我希望在其应用程序范围内的控件之间具有一致的行为.例如,其中一种行为是在获得焦点时突出显示文本框,在失去焦点时删除突出显示.我希望这种情况发生在每一种形式上.
我正在尝试做的是有一个子程序,当它们加载时可以被所有表单调用,这将使这种行为发生.这样,我不必为每个单独的文本框手动编码以使其突出显示.
我试过让VB6在运行时将一个事件处理程序附加到一个控件,但它只是咆哮着我.我来自.Net背景,所以也许我接近VB6的错误.但是,如何在不必为每个控件手动编码的情况下获得所需的行为?
是否可以为特定组件(在我的例子中JTable)设置与已使用的不同的 L&F?如果可以的话,该怎么办呢?
编辑:我根据本教程编写了这段代码。为什么这段代码不起作用?没有失败或异常,但JTable仍然是一样的。
NimbusLookAndFeel nb = new NimbusLookAndFeel();
jTable1.putClientProperty("Windows.Overrides",nb.getDefaults());
jTable1.putClientProperty("Windows.Overrides.InheritDefaults",false);
Run Code Online (Sandbox Code Playgroud) 这是我的代码:
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Test{
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
JPanel jp = new JPanel();
jp.setMinimumSize(new Dimension(200, 200));
jp.setPreferredSize(new Dimension(200, 200));
//frame.getContentPane().setMinimumSize(new Dimension(200, 200));
//frame.getContentPane().setPreferredSize(new Dimension(200, 200));
frame.getContentPane().add(jp);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
它的行为完全符合我的要求。用户可以调整大小,JFrame但它总是足够大以容纳 200px x 200px JPanel。但是当我删除时:
JFrame.setDefaultLookAndFeelDecorated(true);
用户可以调整JFrame到任何大小。
为什么默认外观和感觉装饰会影响调整大小?我怎样才能让它工作没有setDefaultLookAndFeelDecorated(true)?我知道我可以手动设置帧最小尺寸 ( JFrame#setMinimumSize(new Dimension dim)),如果没有更智能的解决方案,我会这样做。
我在 Windows 7 上使用 jdk …
这里有人使用合金外观吗?我在抗锯齿和 JTextComponents 方面遇到了一个奇怪的错误。Alloy 默认情况下根本不使用抗锯齿功能,因此我必须通过创建自己的 UI 类来强制使用它。这在大多数情况下都可以正常工作,但某些字符会对抗锯齿造成严重破坏。
\n\n例如,如果合金设置为外观,并且我将一些希伯来语文本插入到 JTextComponent 中,例如:\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d、\xd7\x9e\xd7\ x94 \xd7\xa9\xd7\x9c\xd7\x95\xd7\x9e\xd7\x9a \xd7\xa9\xd7\x9e\xd7\x99 \xd7\x94\xd7\x95\xd7\x90 \xd7\x94\ xd7\x90\xd7\xa7\xd7\x96\xd7\x99\xd7\x93\',整个 JTextComponent 突然永久失去抗锯齿功能。
\n\n奇怪的是,我什至没有扩展 AlloyTextPaneUI,而是扩展 BasicTextPaneUI 来进行抗锯齿,所以我很困惑合金在哪里出现(其他外观和感觉似乎工作得很好)。
\n\n我很难追踪这个错误...有人遇到过同样的问题吗?
\n\n这是一个演示该问题的简短示例:
\n\nimport com.incors.plaf.alloy.AlloyLookAndFeel;\nimport com.incors.plaf.alloy.themes.glass.GlassTheme;\n\nimport javax.swing.*;\nimport javax.swing.plaf.ComponentUI;\nimport javax.swing.plaf.basic.BasicTextPaneUI;\nimport javax.swing.text.BadLocationException;\nimport javax.swing.text.StyledDocument;\nimport java.awt.*;\n\npublic class Scrap {\n\n static {\n // NOTE: You need a license code for Alloy!\n AlloyLookAndFeel.setProperty("alloy.licenseCode", "your license here");\n\n UIManager.put("TextPaneUI", MyTextPaneUI.class.getName());\n\n try {\n UIManager.setLookAndFeel(new AlloyLookAndFeel(new GlassTheme()));\n } catch (UnsupportedLookAndFeelException e) {\n e.printStackTrace();\n }\n\n // With system Look and Feel everything works just fine...\n// try …Run Code Online (Sandbox Code Playgroud) 我花了最后几个小时试图解决这个问题,但没有成功.
我最近改为黑暗主题,但我在阅读工具提示/提示/ sugestions/overlay窗口时遇到问题(不知道该怎么称呼它,因为我已经看到人们调用所有这些不同的名字),以更易读的格式无需点击它就能阅读它.
已经尝试过切换windows工具提示颜色,如其他帖子所示,但没有成功.我正在使用Windows 7.
从下面的屏幕截图中可以看出,当显示工具提示/提示/ sugestions/overlay窗口时,它是非常难以理解的,并且必须单击它以使其可读是非常烦人的.
关于如何更改未聚焦的背景颜色或所有文本颜色的方法?
没有焦点

有焦点

这已被确认为错误。你可以在这里跟踪它:
https://bugs-stage.openjdk.java.net/browse/JDK-8258934
除了我在 MCVE 中发布的代码之外,没有其他代码在运行;运行此程序时没有其他 JVM 处于活动状态(尽管我认为这无关紧要)。
我没有安装任何自定义系统 UI 的程序。
目标环境
Java 1.8.0_201
Windows 10 Home Edition
Run Code Online (Sandbox Code Playgroud)
测试过的 JDK
由第三方测试
import javax.swing.*;
public class Demo {
public static void main(String[] args) {
SwingUtilities.invokeLater(Demo::launchUI); …Run Code Online (Sandbox Code Playgroud)