import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
/**
* SelectIntervalDialog クラスは、自動再生の再生速度を選択するダイアログを提供します。
* @author Jiro Suzuki
*/
public class SelectIntervalDialog extends JDialog
implements ListSelectionListener,ListCellRenderer{
/** メニューのフォント */
private static final Font FONT_MENU=new Font("MS UI Gothic",Font.PLAIN,17);
private int interval;
/**
* パラメータで指定された SelectIntervalDialog インスタンスを生成します。
* @param owner ダイアログの所有者
* @param title ダイアログのタイトル
* @param modal ダイアログをモーダルにするかどうかの真偽値
*/
SelectIntervalDialog(Frame owner,String title,boolean modal){
super(owner,title,modal);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
interval=0;
String[] menu={" 1秒", " 2秒", " 3秒", " 4秒",
" 5秒", " 6秒", " 7秒", " 8秒"};
JList list=new JList(menu);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setCellRenderer(this);
list.addListSelectionListener(this);
JButton okButton=new JButton("OK");
okButton.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
setVisible(false);
}
});
getContentPane().setLayout(new BorderLayout());
getContentPane().add("Center",list);
getContentPane().add("South",okButton);
}
/**
* 再生速度を指定するダイアログを表示します。
* @return 指定された秒数
*/
public int showIntervalDialog(){
pack();
setVisible(true);
return interval;
}
/**
* 選択範囲内の値が変更されたときに呼び出されます。選択された再生速度をワーク項目に設定します。
* @param e 変更を記述するイベント
*/
public void valueChanged(ListSelectionEvent e) {
JList list=(JList)e.getSource();
interval=list.getSelectedIndex() + 1;
}
/**
* 指定された値を表示するように設定されたコンポーネントを返します。次に、そのコンポーネントの paint メソッドが呼び出されて、セルを「描画」します。
* @param list ペイントしている JList
* @param object list.getModel().getElementAt(index) によって返される値
* @param index セルのインデックス
* @param isSelected 指定されたセルが選択された場合は true
* @param hasFocus 指定されたセルにフォーカスがある場合は true
* @return 指定された値を描画する paint() メソッドがあるコンポーネント
*/
public Component getListCellRendererComponent(JList list, Object object,
int index,boolean isSelected, boolean hasFocus) {
JLabel label = new JLabel((String)object);
label.setOpaque(true);
if (isSelected){
label.setBackground(new Color(255,127,80));
} else {
int remainder=index % 2;
switch(remainder){
case 0:
label.setBackground(new Color(245,245,245));
break;
case 1:
label.setBackground(new Color(230,230,250));
break;
}
}
label.setFont(FONT_MENU);
label.setForeground(Color.BLACK);
return label;
}
}