Swing/NewTabButton のバックアップソース(No.9)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/NewTabButton へ行く。
- 1 (2009-06-08 (月) 13:05:45)
- 2 (2009-06-22 (月) 12:23:33)
- 3 (2009-07-13 (月) 22:53:24)
- 4 (2009-07-15 (水) 20:57:00)
- 5 (2009-08-12 (水) 16:22:28)
- 6 (2011-12-05 (月) 14:27:30)
- 7 (2012-03-21 (水) 01:07:43)
- 8 (2012-03-21 (水) 18:46:30)
- 9 (2012-04-03 (火) 18:51:31)
- 10 (2013-01-09 (水) 20:50:24)
- 11 (2014-05-09 (金) 12:16:39)
- 12 (2014-09-14 (日) 17:19:22)
- 13 (2014-10-15 (水) 01:56:08)
- 14 (2014-11-30 (日) 00:47:00)
- 15 (2016-02-18 (木) 15:54:42)
- 16 (2017-07-07 (金) 16:54:58)
- 17 (2018-02-24 (土) 19:51:30)
- 18 (2018-07-10 (火) 13:59:54)
- 19 (2018-10-30 (火) 16:36:07)
- 20 (2020-10-30 (金) 02:02:08)
- 21 (2022-09-09 (金) 16:02:46)
TITLE:JTabbedPane風のタブ配置をレイアウトマネージャーで変更 #navi(../) RIGHT:Posted by &author(aterai); at 2009-06-08 *JTabbedPane風のタブ配置をレイアウトマネージャーで変更 [#hc561759] CardLayoutとJRadioButtonで作成したJTabbedPane風コンポーネントのタブ配置を自作レイアウトマネージャーで変更します。 -&jnlp; -&jar; -&zip; //#screenshot #ref(http://lh6.ggpht.com/_9Z4BYR88imo/TQTQUU8wtpI/AAAAAAAAAfY/BJyG5weJ1VA/s800/NewTabButton.png) **サンプルコード [#dbcd9376] #code{{ class TabLayout implements LayoutManager, java.io.Serializable { public void addLayoutComponent(String name, Component comp) {} public void removeLayoutComponent(Component comp) {} public Dimension preferredLayoutSize(Container parent) { synchronized (parent.getTreeLock()) { Insets insets = parent.getInsets(); int last = parent.getComponentCount()-1; int w = 0, h = 0; if(last>=0) { Component comp = parent.getComponent(last); Dimension d = comp.getPreferredSize(); w = d.width; h = d.height; } return new Dimension(insets.left + insets.right + w, insets.top + insets.bottom + h); } } public Dimension minimumLayoutSize(Container parent) { synchronized (parent.getTreeLock()) { return new Dimension(100, 24); } } public void layoutContainer(Container parent) { synchronized (parent.getTreeLock()) { Insets insets = parent.getInsets(); int ncomponents = parent.getComponentCount(); int nrows = 1; int ncols = ncomponents-1; //boolean ltr = parent.getComponentOrientation().isLeftToRight(); if (ncomponents == 0) { return; } int lastw = parent.getComponent(ncomponents-1).getPreferredSize().width; int width = parent.getWidth() - (insets.left + insets.right) - lastw; int h = parent.getHeight() - (insets.top + insets.bottom); int w = (width>100*(ncomponents-1))?100:width/ncols; int gap = width - w*ncols; int x = insets.left; int y = insets.top; for (int i=0;i<ncomponents;i++) { int a = (gap>0)?1:0; gap--; int cw = (i==ncols)?lastw:w+a; parent.getComponent(i).setBounds(x, y, cw, h); x += w + a; } } } public String toString() { return getClass().getName(); } } }} **解説 [#l2903531] 上記のサンプルでは、以下のようなレイアウトマネージャーを作成してJRadioButtonをタブ風に並べています。 -最後のタブ(タブ追加ボタン)は常に幅固定 -最後のタブの高さがタブエリアの高さ -タブエリアの幅に余裕がある場合は、各タブ幅は100pxで一定 -タブエリアの幅に余裕がない場合は、各タブ幅は均等 -その他 --タブを削除した場合、先頭タブにフォーカスが移動する --左のJButton(ダミー)は、タブエリアをラップするJPanel(BorderLayout)のBorderLayout.WESTに配置 --アイコンはランダム **参考リンク [#rea3e94d] -[http://www.icongalore.com/ XP Style Icons - Windows Application Icon, Software XP Icons] -[[CardLayoutを使ってJTabbedPane風のコンポーネントを作成>Swing/CardLayoutTabbedPane]] **コメント [#n5459406] - タブをクリックした時ではなく、mousePressedで切り替えるように変更。 -- [[aterai]] &new{2012-03-21 (水) 18:46:30}; #comment