标签: nimbus

Swing和Nimbus:替换JPopupMenu的背景(附加到JMenu)

Nimbus通常看起来很棒,但对于某些颜色组合,结果是非最佳的.在我的情况下,a的背景JPopupMenu不适合,这就是我想手动设置的原因.

我在Java 7上,有趣的是,Nimbus完全忽略了UIManager(像PopupMenu.background)中某些属性的设置.所以我唯一的选择是创建JPopupMenu该覆盖的子类paintComponent(...).我知道,那很讨厌,但至少它起作用了.

但是,如果你添加一个JMenu到另一个菜单,它嵌入它自己的实例,JPopupMenu我无法弄清楚如何用我自己的子类替换它.

即使PopupMenuUI为嵌入式实例分配自己也没有带来任何结果.如果直接从JPopupMenuoverriden paint(...)方法继承而被调用,但是,无论我做了什么,都没有绘制.如果继承的javax.swing.plaf.synth.SynthPopupMenuUI paint甚至没有被调用,结果就是我根本没有设置自己PopupMenuUI.

所以简单的问题是:如何JPopupMenu使用Nimbus作为L&F,在Java 7上调整一个或者(如果这更容易)的背景颜色?

编辑:代码示例

看一下下面的代码和结果:

public static void main(final String[] args) {
    try {
        UIManager.setLookAndFeel(NimbusLookAndFeel.class.getCanonicalName());
        UIManager.getLookAndFeelDefaults().put("PopupMenu.background", Color.GREEN);
        UIManager.getLookAndFeelDefaults().put("Panel.background", Color.RED);
        UIManager.getLookAndFeelDefaults().put("List.background", Color.BLUE);
    } catch (ClassNotFoundException | InstantiationException
            | IllegalAccessException | UnsupportedLookAndFeelException e) {
        e.printStackTrace();
    }
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(200,200);

    JPanel panel = new JPanel(new BorderLayout());
    panel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
    JList …
Run Code Online (Sandbox Code Playgroud)

java swing nimbus jpopupmenu

15
推荐指数
3
解决办法
6815
查看次数

Java中的梯度问题

在我的程序中,我希望在我的JFrame上有一个半透明的白色到透明渐变,以覆盖黄色背景.这工作正常,它需要是白色到透明,因为我的程序设置如何为用户工作.然而,当我把程序带入大学(JRE7到我的JRE6)时,渐变变成白色到黑色然后透明......直到你开始增加白色的不透明度就没那么糟了...无论如何我能解决这个问题?

这是我的JFrame代码顶部的相关代码.

public class DictionaryGUI extends JFrame
{   
    protected JPanel pGradientPane;

    //Interface gradient specification
    private Color pInterfaceColour = new Color(255, 245, 62);
    protected int iDegreeWhite = 180
    protected int iDegreeBlack = 0

    DictionaryGUI(int iWidth, int iHeight)
    {
        /*General definitions*/
        super(String.format("French Verb Conjugator - Version %s", MainLauncher.version));
        setSize(iWidth, iHeight);
        new Menu(this);

        this.iWidth = iWidth;    
        this.iHeight = iHeight;

        getContentPane().setBackground(pInterfaceColour);
        pGradientPane = new JPanel(new GridBagLayout())
        {
            private static final long serialVersionUID = 1L;

            protected void paintComponent(Graphics pGraphics) 
            {
                Graphics2D pGraphicsGradientRender = (Graphics2D) pGraphics; …
Run Code Online (Sandbox Code Playgroud)

java swing gradient nimbus

13
推荐指数
3
解决办法
2377
查看次数

Java Nimbus LAF与透明文本字段

我有一个应用程序在几个地方使用禁用的JTextFields是透明的 - 允许显示背景而不是文本字段的正常背景.

运行新的Nimbus LAF时,这些字段是不透明的(尽管设置了setOpaque(false)),并且我的UI被破坏了.好像LAF忽略了不透明的属性.明确地设置背景颜色在几个地方都很困难,并且由于背景图像实际上不起作用而不是最佳 - 它仍然在顶部绘制LAF默认背景,留下类似边框的外观(下面的启动画面具有明确设置背景以匹配图像).

关于如何让Nimbus不为JTextField绘制背景的任何想法?

注意:我需要一个JTextField而不是JLabel,因为我需要线程安全的setText()和包装功能.

注意:我的后备位置是继续使用系统LAF,但Nimbus确实看起来好多了.

见下面的示例图片.


结论

这种行为的意外是由于对Nimbus错误报告中的setOpaque()意图做错误的解释:

这是Swing的原始设计以及它多年来一直令人困惑的问题.问题是setOpaque(false)在退出LAF时产生了副作用,即隐藏背景并不是真正的背景.可以说,我有透明部分和swing的组件应该在其后面绘制父组件.

不幸的是,Nimbus组件似乎也不尊重setBackground(null),否则这将是停止背景绘制的推荐方法.设置完全透明的背景对我来说似乎不直观.

在我看来,setOpaque()/ isOpaque()是一个错误的公共API选择,应该只有:

public boolean isFullyOpaque();
Run Code Online (Sandbox Code Playgroud)

我这样说,因为isOpaque()== true是与Swing的契约,组件子类将负责绘制它的整个背景 - 这意味着父级可以跳过绘制该区域(如果需要)(这是一个重要的性能增强).外部的东西不能直接改变这个合同(合法地),其履行可以编码到组件中.

因此,不应使用setOpaque()设置组件的不透明度.相反,像setBackground(null)这样的东西会导致许多组件"没有背景",因此变得不完全不透明.举例来说,在理想的世界中,大多数组件应该具有如下所示的isOpaque():

public boolean isOpaque() { return (background!=null); }
Run Code Online (Sandbox Code Playgroud)

示例http://i41.tinypic.com/sviczq.png

替代文字http://i44.tinypic.com/35d80ao.png

java swing nimbus

11
推荐指数
1
解决办法
7668
查看次数

JTable - 布尔单元格类型 - 背景

我正在使用Nimbus L&F,JTable它有一个布尔(复选框)元素作为其列之一.

带有复选框的Nimbus JTable

我遇到的问题是布尔列不遵循Nimbus L&F中存在的自然行背景替换.

java checkbox swing jtable nimbus

11
推荐指数
1
解决办法
6050
查看次数

Apache Storm:无法从种子主机中找到领导者的灵气

我按照本教程安装了Apache Storm 1.0:http://opensourceeducation.net/how-to-install-and-configure-apache-strom/.但我注意到两个问题:

- >我无法从互联网访问风暴ui.

- >如果我尝试访问localhost:8080,我收到错误:

org.apache.storm.utils.NimbusLeaderNotFoundException: Could not find leader nimbus from seed hosts [localhost]. Did you specify a valid list of nimbus hosts for config nimbus.seeds?
at org.apache.storm.utils.NimbusClient.getConfiguredClientAs(NimbusClient.java:90)
at org.apache.storm.ui.core$cluster_configuration.invoke(core.clj:343)
at org.apache.storm.ui.core$fn__12106.invoke(core.clj:929)
at org.apache.storm.shade.compojure.core$make_route$fn__2467.invoke(core.clj:93)
at org.apache.storm.shade.compojure.core$if_route$fn__2455.invoke(core.clj:39)
at org.apache.storm.shade.compojure.core$if_method$fn__2448.invoke(core.clj:24)
at org.apache.storm.shade.compojure.core$routing$fn__2473.invoke(core.clj:106)
at clojure.core$some.invoke(core.clj:2570)
at org.apache.storm.shade.compojure.core$routing.doInvoke(core.clj:106)
at clojure.lang.RestFn.applyTo(RestFn.java:139)
at clojure.core$apply.invoke(core.clj:632)
at org.apache.storm.shade.compojure.core$routes$fn__2477.invoke(core.clj:111)
at org.apache.storm.shade.ring.middleware.json$wrap_json_params$fn__11576.invoke(json.clj:56)
at org.apache.storm.shade.ring.middleware.multipart_params$wrap_multipart_params$fn__3543.invoke(multipart_params.clj:103)
at org.apache.storm.shade.ring.middleware.reload$wrap_reload$fn__4286.invoke(reload.clj:22)
at org.apache.storm.ui.helpers$requests_middleware$fn__3770.invoke(helpers.clj:46)
at org.apache.storm.ui.core$catch_errors$fn__12301.invoke(core.clj:1230)
at org.apache.storm.shade.ring.middleware.keyword_params$wrap_keyword_params$fn__3474.invoke(keyword_params.clj:27)
at org.apache.storm.shade.ring.middleware.nested_params$wrap_nested_params$fn__3514.invoke(nested_params.clj:65)
at org.apache.storm.shade.ring.middleware.params$wrap_params$fn__3445.invoke(params.clj:55)
at org.apache.storm.shade.ring.middleware.multipart_params$wrap_multipart_params$fn__3543.invoke(multipart_params.clj:103)
at org.apache.storm.shade.ring.middleware.flash$wrap_flash$fn__3729.invoke(flash.clj:14)
at org.apache.storm.shade.ring.middleware.session$wrap_session$fn__3717.invoke(session.clj:43)
at …
Run Code Online (Sandbox Code Playgroud)

nimbus apache-storm apache-zookeeper

11
推荐指数
1
解决办法
1万
查看次数

Java:如何动态覆盖类的方法(类最终不在类路径中)?

如何动态+有条件地调用类的方法?
(类最终不在类路径中)

让我们说,我需要这个类NimbusLookAndFeel,但在某些系统上它是不可用的(即OpenJDK-6).

所以我必须能够:

  • 了解该类是否可用(在运行时),
  • 如果不是这样,请跳过整个事情.
  • 如何设法覆盖动态加载类的方法
    (从而创建它的匿名内部子类)?

代码示例

public static void setNimbusUI(final IMethod<UIDefaults> method)
    throws UnsupportedLookAndFeelException {

  // NimbusLookAndFeel may be now available
  UIManager.setLookAndFeel(new NimbusLookAndFeel() {

    @Override
    public UIDefaults getDefaults() {
      UIDefaults ret = super.getDefaults();
      method.perform(ret);
      return ret;
    }

  });
}
Run Code Online (Sandbox Code Playgroud)

编辑:
现在我按照建议编辑了我的代码,NoClassDefFoundError使用try-catch 拦截.它失败.我不知道,如果是OpenJDK的错.我得到了InvocationTargetException,造成的NoClassDefFoundError.有趣,我无法抓住InvocationTargetException:无论如何它都被扔了.

EDIT2: :
原因发现:我包裹SwingUtilities.invokeAndWait(...)周围的测试方法,那很invokeAndWait调用抛出NoClassDefFoundError时加载雨云失败.

EDIT3: :
任何人都可以请澄清其中 …

java reflection openjdk classpath nimbus

10
推荐指数
1
解决办法
1万
查看次数

每个组件实例覆盖Swing Nimbus L&F主色

我试图为JButton/JTabbedPane的特定实例覆盖"nimbusBase"颜色而没有运气.只有组件的特定属性,例如"Button.background",才有效.任何的想法?

UIDefaults dialogTheme = new UIDefaults();
// dialogTheme.put(“nimbusBase”, Color.orange);
// dialogTheme.put("nimbusBlueGrey", Color.blue);
dialogTheme.put("Button.background", Color.yellow);
JButton dialogButton = new JButton("North");
dialogButton.putClientProperty("Nimbus.Overrides.InheritDefaults", true);
dialogButton.putClientProperty("Nimbus.Overrides", dialogTheme);
Run Code Online (Sandbox Code Playgroud)

java swing nimbus

9
推荐指数
1
解决办法
6618
查看次数

是否保证有一定的外观和感觉?

根据我的发现,Nimbus外观在Java 6 Update 10中引入.

我有项目,我使用的外观和感觉.

是否有任何情况,用户拥有比6更新10更新的Java VM(例如6更新26)并且Nimbus外观不可用?例如,如果可以手动/显式删除外观和感觉,可能会出现这种情况,但我无法确定是否可以这样做.

基本上,100%保证,如果用户拥有正确的Java VM版本,Nimbus外观将在100%的时间内可用吗?

先感谢您.

java swing look-and-feel nimbus

9
推荐指数
1
解决办法
300
查看次数

JFileChooser上的系统外观布局,但具有灵气的外观和感觉主题

JFileChooser上的窗口外观和感觉布局比其他外观好很多,感觉就像灵气.

所以我正在寻找一种方法来获得系统外观和感觉的布局,但在顶部有nimbus或其他主题.

这可能吗?如果是这样,怎么办呢?

java swing jfilechooser look-and-feel nimbus

8
推荐指数
1
解决办法
4253
查看次数

启用nimbus时,JDK7中无法透明且未修饰的JFrame

看这张图片 : 透明的JFrame

这是透明框架的代码:

GraphicsEnvironment ge = 
        GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice gd = ge.getDefaultScreenDevice();

        if (!gd.isWindowTranslucencySupported(TRANSLUCENT)) {
            System.err.println(
                "Translucency is not supported");
                System.exit(0);
        }

        JFrame.setDefaultLookAndFeelDecorated(true);
Run Code Online (Sandbox Code Playgroud)

这很好但是在尝试通过添加启用LookAndFeel时

    try {
    for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
         if ("Nimbus".equals(info.getName())) {
            javax.swing.UIManager.setLookAndFeel(info.getClassName());
            break;
          }
    }
}catch(.......)
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误

线程"AWT-EventQueue-0"中的异常java.awt.IllegalComponentStateException:框架被修饰

这个错误是什么?以及如何解决?

感谢您的回答和建议.

编辑

问题问题/ CrossPosted

java swing nimbus translucency java-7

8
推荐指数
2
解决办法
8026
查看次数