JTableHaeder에는 기본적으로 '누른'강조 표시가 없습니다. (Nimbus)Nimbus TableHeader가 'pressed'로 강조 표시되지 않았습니다.
NimbusDefaults에는 기본 [Pressed] 백그라운드 페인터가 있다고 나와 있습니다.
내가 TableHeader를 클릭하면 어떻게해야합니까?
UPDATE 1
NimbusStyle.getExtendedState
반환은 제대로 mouseDown에 눌렀습니다. 그러나 NimbusStyle.getBackgroundPainter(SynthContext)
은 null
을 반환합니다.이 상태의 CacheKey "backgroundPainter $$ instance"에 대한 NimbusStyle.Values
캐시에 null
이 있으므로 원인이됩니다.
무엇이 잘못 되었나요?
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();
}
}
}
내 경우에는 드래그 할 수 없습니다. yy – oliholz
@oliholz 끌기는 눌려진 열 밖에서 그림을 그리기 위해 렌더러를 다시 사용하는 예일뿐입니다 .- 어떤 이유로 든 발생할 수 있습니다. 반쯤 강력하게하려면 편집 된 답변에서 wrappingRenderer와 같은 것이 필요할 것입니다. – kleopatra