Метод «setStyleSheet» УСТАНАВЛИВАЕТ таблицу стилей, а не добавляет новую, поэтому вы продолжаете переопределять уже установленную.
Чтобы указать несколько стилей, попробуйте следующее:
snapshotToolButton.setStyleSheet("#SnapShotButton {border: none;} #SnapShotButton:hover { background-color: pink; }")
Добавить HierarchyListener
public class MyShowingListener {
private JComponent component;
public MyShowingListener(JComponent jc) { component=jc; }
public void hierarchyChanged(HierarchyEvent e) {
if((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED)>0 && component.isShowing()) {
System.out.println("Showing");
}
}
}
JTable t = new JTable(...);
t.addHierarchyListener(new MyShowingListener(t));
Вы можете прослушивать событие изменения размера. Когда компонент отображается в первый раз, его размер изменяется от 0,0 до того, что определит менеджер по расположению (если он есть).
Вам необходимо проверить иерархию компонентов. Проверить после вызова AncestorListener.ancestorAdded .
Я всегда использовал Coomponent.addNotify, чтобы узнать, когда компонент готов к рендерингу. Не уверен, что это лучший способ, но у меня он работает. Конечно, вы должны создать подкласс компонента.
Component.isDisplayable должен быть правильным ответом, но я знаю, что он не сработал для меня, как я думал (не помню почему, но что-то произошло, и я переключился на addNotify).
Глядя в исходный код SUN, я вижу, что addNotify запускает HierarchyEvent.SHOWING_CHANGED, так что это лучший способ получать уведомления.