package com.dianping.ant;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Label;
import java.awt.List;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class SelectFrame extends Frame {
private static final long serialVersionUID = 1L;
String result;
Button ok;
TextField text;
List list;
public SelectFrame(final String[] options) {
super("Select");
setFont(new Font("Helvetica", Font.PLAIN, 14));
this.setSize(400, 500);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
setResult("");
}
});
Panel p = new Panel();
BorderLayout l = new BorderLayout();
p.setLayout(l);
ok = new Button(" Launch ");
ok.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setResult(text.getText());
}
});
l.addLayoutComponent(ok, BorderLayout.EAST);
p.add(ok);
Label label = new Label("myapp://");
l.addLayoutComponent(label, BorderLayout.WEST);
p.add(label);
text = new TextField();
l.addLayoutComponent(text, BorderLayout.CENTER);
p.add(text);
list = new List();
for (String str : options) {
list.add(str);
}
list.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
int i = list.getSelectedIndex();
if (i < 0) {
return;
}
text.setText(list.getItem(i));
}
});
list.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
int i = list.getSelectedIndex();
if (i < 0) {
return;
}
setResult(list.getItem(i));
}
}
});
list.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int i = list.getSelectedIndex();
if (i < 0) {
return;
}
setResult(list.getItem(i));
}
});
l = new BorderLayout();
setLayout(l);
l.addLayoutComponent(list, BorderLayout.CENTER);
l.addLayoutComponent(p, BorderLayout.SOUTH);
add(p);
add(list);
}
public String result() {
return result;
}
public String doModel() {
setVisible(true);
synchronized (this) {
try {
wait();
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
return result;
}
private void setResult(String r) {
result = r;
synchronized (SelectFrame.this) {
SelectFrame.this.notify();
}
dispose();
}
}