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; } }