Javaに関するちょっとしたこと

Javaに関するちょっとしたこと。

標準のXMLパーサ使用上の注意(?)

改行も一つのテキストノードとして扱われるので, 手打ちで作ったXMLファイルを扱う場合は要注意.

swingのJTree内のノードをクリックしたときの処理

javax.swing.JTreeの中に表示されるノードがクリックされたときに, 独自の処理をしたい場合には次のようにする.

tree.addMouseListener(new MouseAdapter() {
    public void mousePressed(MouseEvent e) {
        TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
        if (selPath != null) {
            Object selNode = selPath.getLastPathComponent();
            if (selNode instanceof MyTreeNode) {
                MyTreeNode myNode = (MyTreeNode)selNode;
                myNode.clicked(
                        new Point(e.getX(), e.getY()),
                        tree.getPathBounds(selPath));
                ((DefaultTreeModel)tree.getModel()).nodeChanged(myNode);
            }
        }
    }
});

あまり綺麗なソースは言い難いのだが, とりあえずメイン側では上のように処理しておいて, ノード側では次のようにする.

public void clicked(Point point, Rectangle pathBounds) {
    Dimension checkSize = this.check.getSize();
    if (pathBounds.x < point.x &&
        point.x < (pathBounds.x + checkSize.width) &&
        pathBounds.y < point.y &&
        point.y < (pathBounds.y + checkSize.height)) {
        this.check.setSelected(!this.check.isSelected());
    }
}

ここではチェックボックスのON/OFFをやっているわけだけど, ノード側では自分がどこに配置されているのか分からないので, 親側から教えてもらっているのがミソ. 自分の基点座標が分かればあとは自分の持っているパーツの座標を 元に判定を行えば良い.

JSpinnerの入力桁数を変える方法

((JSpinner.NumberEditor)spinner.getEditor()).getTextField().setColumns(cols);

swingのLook&FeelをMS-Windows標準に変える方法

プロパティとして以下のものを設定する

swing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel

プロパティの設定の仕方として一番簡単なのはjavaの起動時に

java -Dswing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel ほげほげ(クラス名)

とするのが良いかと.eclipseではjavaVM引数に指定すればOK

参考URL: http://www.h7.dion.ne.jp/~cafebabe/java/swing/submetal/

おしながき / 自己紹介 / 尾内研メンバー紹介 / 尾内研HOME / 情報工学科HOME