Swing/HoverCloseButton のバックアップの現在との差分(No.2)
TITLE:JTabbedPaneのCloseButtonをフォーカスがある場合だけ表示
JTabbedPaneのCloseButtonをフォーカスがある場合だけ表示
編集者:Terai Atsuhiro~
作成日:2008-01-21
更新日:2021-12-23 (木) 17:18:41
概要
JTabbedPane
のタブを閉じるボタンを、タブにフォーカスがある場合だけ表示します。
Screenshot
Advertisement
概要
JTabbedPaneのタブを閉じるボタンを、タブにフォーカスがある場合だけ表示します。サンプルコード
#spanend
#spanadd
class HoverCloseButtonTabbedPane extends JTabbedPane {
#spanend
private transient MouseMotionListener hoverHandler;
public HoverCloseButtonTabbedPane() {
super(TOP, SCROLL_TAB_LAYOUT);
}
#spandel
#screenshot
#spanend
public HoverCloseButtonTabbedPane(int tabPlacement) {
super(tabPlacement, SCROLL_TAB_LAYOUT);
}
#spandel
**サンプルコード [#h7af8be1]
#spanend
#spandel
#code{{
#spanend
#spandel
public MyJTabbedPane() {
#spanend
super();
setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
addMouseMotionListener(new MouseMotionAdapter() {
private int prev = -1;
@Override public void mouseMoved(MouseEvent e) {
JTabbedPane source = (JTabbedPane)e.getSource();
int focussed = source.indexAtLocation(e.getX(), e.getY());
int selected = source.getSelectedIndex();
if(focussed==prev) return;
for(int i=0;i<source.getTabCount();i++) {
TabPanel tab = (TabPanel)source.getTabComponentAt(i);
tab.setButtonVisible(i==selected || i==focussed);
}
prev = focussed;
@Override public void updateUI() {
removeMouseMotionListener(hoverHandler);
super.updateUI();
if (hoverHandler == null) {
hoverHandler = new MouseMotionAdapter() {
private int prev = -1;
@Override public void mouseMoved(MouseEvent e) {
JTabbedPane source = (JTabbedPane) e.getComponent();
int focussed = source.indexAtLocation(e.getX(), e.getY());
if (focussed == prev) {
return;
}
for (int i = 0; i < source.getTabCount(); i++) {
TabPanel tab = (TabPanel) source.getTabComponentAt(i);
tab.setButtonVisible(i == focussed);
}
prev = focussed;
}
};
}
});
addMouseMotionListener(hoverHandler);
}
#spanadd
#spanend
@Override public void addTab(String title, final Component content) {
super.addTab(title, content);
setTabComponentAt(getTabCount() - 1, new TabPanel(this, title, content));
}
}
View in GitHub: Java, Kotlin- &jnlp;
- &jar;
- &zip;
解説
上記のサンプルでは、JDK 6 で導入されたタブにコンポーネントを追加する機能を使って、タブ上にマウスカーソルがある場合や、フォーカスがある場合にだけJButtonを表示しています。解説
上記のサンプルでは、JDK 6
で導入されたタブにコンポーネントを追加する機能を使って、タブ上にマウスカーソルがある場合だけそのタブを閉じるためのJButton
を表示しています。
参考リンク
- JTabbedPaneにタブを閉じるボタンを追加
- JTabbedPaneのタブ文字列をハイライト
-
JButton
が表示されてもそのタブ幅は常に一定 -
JButton
が表示されて内部のタブタイトル表示幅が短くなった場合は超過したタブ文字列を...
で省略