プログラマメモ2 - programmer no memo2

[java]パン屑もどき 2009/04/01



Javaです。パンくずです。
パンくずってすごくすぐれたナビゲーションだと思います。

既存の部品でそれっぽいの作成してみます。



JLabelを使ってます。HTMLコードをsetTextして見え方を変えてます。
配置するパネルのレイアウトをFlowLayoutにしています。

以下、コード
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Breadcrumbs {

public static void main(String[] args) {
final JFrame frame = new JFrame() {
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setAlwaysOnTop(true);
}
};
frame.getContentPane().add(new _Breadcrumbs() {
{
addBread("aaaa");
addBread(">");
addBread("bbbb");
addBread(">");
addBread("cccc");
addBread(">");
addBread("dddd");
}
});

frame.setVisible(true);
}

static class _Breadcrumbs extends JPanel {

public _Breadcrumbs() {
super();
setLayout(new FlowLayout());
}

public void addBread(String s) {
add(new MyLabel(s));
}

}

static class MyLabel extends JLabel {
{
final String _HTML_ = "<html><body><u>%s</u></body>";
final String SEPA = ">";

setForeground(Color.BLUE);
addMouseMotionListener(new MouseAdapter() {
{
addMouseListener(this);
}
String tmp;

@Override
public void mouseEntered(MouseEvent e) {
tmp = getText();
// 区切りなら入れ替えない
if (SEPA.equals(tmp))
return;

setText(String.format(_HTML_, getText()));
}

@Override
public void mouseExited(MouseEvent e) {
setText(tmp);
}

});
}

public MyLabel(String s) {
super(s);
}
}
}

: