Заголовок таблицы Nimbus не был выделен как «нажатый»

JTableHaeder по умолчанию не имеет «нажатой» подсветки. (Nimbus)

NimbusDefaults говорит, что у него есть по умолчанию [Pressed] рисовальщик фона.

Что мне делать, чтобы увидеть это, когда я нажимаю на заголовок таблицы?

NimbusDefaultPainter


ОБНОВЛЕНИЕ 1

] NimbusStyle.getExtendedState правильно возвращает НАЖАТИЕ на mouseDown. Но NimbusStyle. getBackgroundPainter (SynthContext) возвращает null , потому что есть null в кэше NimbusStyle.Values ​​ для фона экземпляра CacheKey [11139254 $$Painter $$ с этим состоянием.

Что там не так?


ОБНОВЛЕНИЕ 2

В моем примере показаны JTableHeader и JScrollBar с 'Pressed Behavior'.

Для 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();
        }
    }
}

6
задан kleopatra 30 August 2013 в 13:19
поделиться