Java 带有 tableHeaderUI 的 Swing UIManager
Java Swing UIManager with tableHeaderUI
按照此列表 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);
}
});
但在运行时它崩溃了,每个 table header 都消失了,这是错误信息...
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)
None好像是用这个属性,我没找到具体的例子。
你破坏了 UIManager
因为你放了一个错误类型的对象
对于键 "TableHeaderUI"
。
相反,对于键 "TableHeaderUI"
,值应该是 String
(给出 class 的完全限定名称
实现接口 javax.swing.plaf.TableHeaderUI
).
例如你可以这样做:
UIManager.put("TableHeaderUI", MyTableHeaderUI.class.getName());
实现方式 class 如下:
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 class 将永远不会被实例化。请参阅 UIDefaults.getUI(JComponent).
的 javadoc
按照此列表 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);
}
});
但在运行时它崩溃了,每个 table header 都消失了,这是错误信息...
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)
None好像是用这个属性,我没找到具体的例子。
你破坏了 UIManager
因为你放了一个错误类型的对象
对于键 "TableHeaderUI"
。
相反,对于键 "TableHeaderUI"
,值应该是 String
(给出 class 的完全限定名称
实现接口 javax.swing.plaf.TableHeaderUI
).
例如你可以这样做:
UIManager.put("TableHeaderUI", MyTableHeaderUI.class.getName());
实现方式 class 如下:
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 class 将永远不会被实例化。请参阅 UIDefaults.getUI(JComponent).