默認情況下,JTableHaeder沒有「已按下」高亮顯示。 (Nimbus)Nimbus TableHeader未被高亮顯示爲「已按下」
NimbusDefaults說它有一個默認[按]後臺畫家。
當我點擊TableHeader時,該怎麼辦?
UPDATE 1
的NimbusStyle.getExtendedState
返回按壓在鼠標按下正確。但NimbusStyle.getBackgroundPainter(SynthContext)
返回null
原因有null
在NimbusStyle.Values
高速緩存中的CacheKey 「backgroundPainter $$實例」與此狀態。
那裏有什麼問題?
UPDATE 2
我的例子示出了JTableHeader的和JScrollBar的以 '壓行爲'。
對於JScrollBar我的putClientProperty("Nimbus.State")
與重繪問題一起使用。
public class Header extends JPanel{
public Header() {
super(new BorderLayout());
JTableHeader header = new JTable(5, 3).getTableHeader();
JScrollBar scroll = new JScrollBar(JScrollBar.HORIZONTAL);
add(header, BorderLayout.NORTH);
add(scroll, BorderLayout.SOUTH);
scroll.addMouseListener(new PressedBehavior());
header.addMouseListener(new PressedBehavior());
}
static public void main(String[] s) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame("Nimbus Pressed Example");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setBounds(150, 150, 300, 200);
f.getContentPane().add(new Header());
f.setVisible(true);
}
});
} catch(Exception fail) { /*ignore*/ }
}
private class PressedBehavior extends MouseAdapter {
@Override
public void mouseReleased(MouseEvent e) {
JComponent source = (JComponent)e.getComponent();
source.putClientProperty("Nimbus.State", null);
}
@Override
public void mousePressed(MouseEvent e) {
JComponent source = (JComponent)e.getComponent();
source.putClientProperty("Nimbus.State", "Pressed");
//source.invalidate();
//source.repaint();
}
}
}
我的情況,這是不可拖動的。 yay – oliholz 2011-05-04 14:34:20
@oliholz拖動只是重新使用渲染器在按下列之外進行繪畫的一個示例;-)無論出於何種原因都可能發生。爲了讓它中途穩定,你需要在我編輯的答案中使用類似wrappingRenderer的東西 – kleopatra 2011-05-04 15:22:42