【问题标题】:Java Swing UIManager with tableHeaderUI带有 tableHeaderUI 的 Java Swing UIManager
【发布时间】:2017-06-03 06:21:47
【问题描述】:

按照此列表http://thebadprogrammer.com/swing-uimanager-keys/,所有与字体和颜色相关的内容都可以,但我正在尝试为组件设置默认高度,并且该列表中的每个组件都有一个 xxxUI,我不知道如何实现。

我试过了

UIManager.put("TableHeaderUI", new TableHeaderUI() {
        //it crashes empty aswell
        @Override
        public Dimension getPreferredSize(JComponent c) {
            return super.getPreferredSize(c);
        }
    });

但在运行时它崩溃并且每个表头都消失了,这是错误消息...

UIDefaults.getUI() failed: no ComponentUI class for: javax.swing.table.JTableHeader[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=16777224,maximumSize=,minimumSize=,preferredSize=,draggedDistance=0,reorderingAllowed=true,resizingAllowed=true,updateTableInRealTime=true]
java.lang.Error
    at javax.swing.UIDefaults.getUIError(Unknown Source)
    at javax.swing.MultiUIDefaults.getUIError(Unknown Source)
    at javax.swing.UIDefaults.getUI(Unknown Source)
    at javax.swing.UIManager.getUI(Unknown Source)
    at javax.swing.table.JTableHeader.updateUI(Unknown Source)
    at javax.swing.table.JTableHeader.<init>(Unknown Source)
    at javax.swing.JTable.createDefaultTableHeader(Unknown Source)
    at javax.swing.JTable.initializeLocalVars(Unknown Source)
    at javax.swing.JTable.<init>(Unknown Source)
    at javax.swing.JTable.<init>(Unknown Source)

似乎没有人使用这个属性,我还没有找到一个具体的例子。

【问题讨论】:

    标签: java swing uimanager


    【解决方案1】:

    您破坏了UIManager,因为您放置了错误类型的对象 对于密钥"TableHeaderUI"。

    相反,对于键 "TableHeaderUI",值应该是 String (给出类的完全限定名称 实现接口javax.swing.plaf.TableHeaderUI)。

    例如你可以这样做:

    UIManager.put("TableHeaderUI", MyTableHeaderUI.class.getName());
    

    使用这样的实现类:

    public class MyTableHeaderUI extends BasicTableHeaderUI {
    
        // UIDefaults.getUI(JComponent) will call this method via reflection
        public static ComponentUI createUI(JComponent h) {
            return new MyTableHeaderUI();
        }
    
        @Override
        public Dimension getPreferredSize(JComponent c) {
            return super.getPreferredSize(c);
        }
    }
    

    一个特别的事情(远非显而易见)是:您需要实现自己的 static createUI(JComponent) 方法,否则您的 UI 类将永远不会被实例化。参见UIDefaults.getUI(JComponent)的javadoc。

    【讨论】:

      猜你喜欢
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      相关资源
      最近更新 更多