未分類

トップ > チップス > 未分類
2012-02-13, swing_misc

/tips/java/swing/misc **コンポーネントが属するウィンドウを取得する コンポーネントがJFrame上に居ることが分かっている場合、下記のようにして親フレームを取得することが出来ます。ダイアログの表示等、親フレームの情報が必要な操作を行う場合に便利です。 :JFrame parentFrame = (JFrame) comp.getTopLevelAncestor();

**ファイルをドラッグ可能にする コンポーネントからファイルをドラッグ開始可能にする手順です。DragGestureListenerを作成し、DragSourceに登録します。

:DragGestureListener dgl = new DragGestureListener() { : : @Override : public void dragGestureRecognized(DragGestureEvent dge) { : final File target = new File("foobar.txt"); : : Transferable t = new Transferable() { : : @Override : public Object getTransferData(DataFlavor flavor) : throws UnsupportedFlavorException, IOException { : if (flavor.equals(DataFlavor.javaFileListFlavor)) { : List list = new LinkedList(); : list.add(target); : return list; : } else : throw new UnsupportedFlavorException(flavor); : } : : @Override : public DataFlavor[] getTransferDataFlavors() { : return new DataFlavor[] { DataFlavor.javaFileListFlavor }; : } : : @Override : public boolean isDataFlavorSupported(DataFlavor flavor) { : return Arrays.asList(getTransferDataFlavors()) : .contains(flavor); : } : }; : // ファイルを移動する : dge.startDrag(null, t); : } :}; :DragSource ds = DragSource.getDefaultDragSource(); :ds.createDefaultDragGestureRecognizer({strong:component}, : DnDConstants.ACTION_MOVE, dgl);

**ポップアップメニューを登録する MouseListenerを使って、JPopupのshowメソッドを呼び出す方法より明瞭です。メニュー項目の有効・無効の切り替え処理はJPopupのshowメソッドをオーバライドして記述します。

:comp.setComponentPopupMenu(new FooPopupMenu(textArea));

-{link:http://terai.xrea.jp/Swing/ComponentPopupMenu.html}

**Swingのテーマをメタルに戻す 最近のデフォルトは青っぽいテーマ(Ocean?)ですが、以前の渋いデザインに戻すには、以下のパラメタをVMに与えます。 :-Dswing.metalTheme=steel

**CtrlやAltなどの修飾キーの押下を検出する KeyEventクラスに便利なメソッドが揃っているので、それを使用します。マスクによるビット演算よりも、こちらを使用した方が(コードが読み易いので)良いでしょう。 :public void keyReleased(KeyEvent e) { : if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER){ : // [Ctrl]+[Enter]が押された場合の処理 : } :}

**GridBagLayoutでテキストフィールドが潰れるのを防ぐ リンク先によると、GridBagLayoutではコンポーネントの最小サイズを使用することがあるため、最小サイズ0のテキストフィールドが潰れてしまう現象が起こるとのこと。よって最小サイズを強引に推奨サイズに置き換えることで回避できます。 :tf.setMinimumSize(tf.getPreferredSize());

-{link:http://satoshi.kinokuni.org/tech/SwingTipsLayout.html}

**NimbusL&Fを適用する JRE6u10以降ではNimbusというLook and Feelを使用することができます。設定方法は以下の通りです。テーブルのスタイルなんかがとても良い雰囲気です。 :try { : // 可能ならNimbusを設定する : UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); :} catch (Exception e) { :}

**JLabelの文字列をセンタリング 似たようなメソッドが沢山あって毎回悩むのですが、JLabelに表示されているテキストをセンタリング(ついでに縦位置は下付けに)したい場合、3番目のメソッドが正解です。

:titleLabel.setHorizontalTextPosition(JLabel.CENTER); :titleLabel.setVerticalTextPosition(JLabel.BOTTOM);

:titleLabel.setAlignmentX(JLabel.CENTER_ALIGNMENT); :titleLabel.setAlignmentY(JLabel.BOTTOM_ALIGNMENT);

:titleLabel.setHorizontalAlignment(JLabel.CENTER); :titleLabel.setVerticalAlignment(JLabel.BOTTOM);

この記事は役に立ちましたか?