2017-06-03 5 views
1

http://thebadprogrammer.com/swing-uimanager-keys/に続いて、フォントや色に関するすべてのことはOKですが、コンポーネントとそのリストのすべての単一コンポーネントの高さを設定しようとすると、実装方法はわかりません。Java Swing UIManager with tableHeaderUI

私は

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

しようとしたが、実行時にそれがクラッシュし、すべてのテーブルヘッダがなくなって、HERESにエラーメッセージが...

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) 

なしこのプロパティを使用していないようにみえ、私は避難所」これの具体的な例が見つかりました。

答えて

1

キー"TableHeaderUI"に間違ったタイプのオブジェクト を置くので、UIManagerが駄目になりました。

代わりに、キー"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クラスがインスタンス化されません。 javadocのUIDefaults.getUI(JComponent)を参照してください。

+0

それは、その正確さのおかげで働いた。 –