在瞭解各種基本組件的使用,以及常見事件的處理之後,本案例將綜合文本框、按鈕和下拉列表組件,實現一個星座選擇器程序。程序允許用戶在下拉列表中選擇一個自己的星座,如果不在列表中還可以增加星座,也可以刪除星座。實現過程如下。
(1) 創建一個 SampeDemo 類,在 main() 方法中調用它的構造方法。代碼如下:
package my;
public class SampeDemo
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
new SampeDemo();//調用構造方法
}
}
(2) 創建 SampeDemo 構造方法完成窗口的創建,按鈕和下拉列表的添加,以及相應事件的監聽。具體代碼如下:
private JPanel panel=new JPanel();
private JComboBox cmb=new JComboBox();//創建JComboBox
private JLabel label1=new JLabel("添加新星座");
private JLabel showInfo=new JLabel();//用於顯示信息
private JTextField jtf=new JTextField(16);//用於輸入信息
private JButton buttonADD=new JButton();//新增
private JButton buttonDel=new JButton();//刪除
public SampeDemo()
{
JFrame frame=new JFrame("選擇你的星座");
cmb.addItem("--請選擇--");
cmb.addItem("金牛座");
cmb.addItem("雙子座");
cmb.addItem("白羊座");
panel.add(cmb);
panel.add(label1);
panel.add(jtf);
panel.add(buttonADD);
panel.add(buttonDel);
frame.add(panel);
cmb.addItemListener(new MyItemListener());//下拉列表的事件
frame.setBounds(300,200,600,200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
上述程序創建的下拉列表爲 cmb,調用它的 addItem() 方法向其中添加了兩個選項。程序監聽了下拉列表中選擇項時的選中事件。
(3) 創建 MyItemListener 類,實現 ItemListener 接口對選中事件進行處理,此時將選中項顯示到文本框中。實現代碼如下:
//監聽選中事件
class MyItemListener implements ItemListener
{
@Override
public void itemStateChanged(ItemEvent e)
{
// TODO Auto-generated method stub
String str=e.getItem().toString();
panel.add(showInfo);
showInfo.setText("您選擇的星座是:"+str);
}
}
(4) 監聽增加和刪除按鈕的事件處理,實現代碼如下:
// 監聽添加和刪除按鈕事件
buttonADD.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
String command=e.getActionCommand();
//添加按鈕處理
if(command.equals("新增"))
{
if(jtf.getText().length()!=0)
{
cmb.addItem(jtf.getText()); //添加項
panel.add(showInfo);
showInfo.setText("添加成功,新增了:"+jtf.getText());
}
else
{
panel.add(showInfo);
showInfo.setText("請輸入要添加星座");
}
}
}
});
//刪除按鈕處理
buttonDel.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method stub
String command=e.getActionCommand();
if(command.equals("刪除"))
{
if(cmb.getSelectedIndex()!=-1)
{
//先獲得要刪除的項的值
String strDel=cmb.getSelectedItem().toString();
cmb.removeItem(strDel); //刪除項
panel.add(showInfo);
showInfo.setText("刪除成功,刪除了:"+strDel);
}
else
{
panel.add(showInfo);
showInfo.setText("請選擇要刪除的星座");
}
}
}
});
整體代碼實現如下:
package my;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import com.sun.java.swing.plaf.motif.MotifButtonListener;
public class SampeDemo
{
private JPanel panel=new JPanel();
private JComboBox cmb=new JComboBox();//創建JComboBox
private JLabel label1=new JLabel("添加新星座");
private JLabel showInfo=new JLabel();//用於顯示信息
private JTextField jtf=new JTextField(16);//用於輸入信息
private JButton buttonADD=new JButton("新增");//新增
private JButton buttonDel=new JButton("刪除");//刪除
public SampeDemo()
{
JFrame frame=new JFrame("選擇你的星座");
cmb.addItem("--請選擇--");
cmb.addItem("金牛座");
cmb.addItem("雙子座");
cmb.addItem("白羊座");
panel.add(cmb);
panel.add(label1);
panel.add(jtf);
panel.add(buttonADD);
panel.add(buttonDel);
frame.add(panel);
cmb.addItemListener(new MyItemListener());//下拉列表的事件
frame.setBounds(300,200,600,200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//監聽選中事件
class MyItemListener implements ItemListener
{
@Override
public void itemStateChanged(ItemEvent e)
{
// TODO Auto-generated method stub
String str=e.getItem().toString();
panel.add(showInfo);
showInfo.setText("您選擇的星座是:"+str);
}
}
// 監聽添加和刪除按鈕事件
buttonADD.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
String command=e.getActionCommand();
//添加按鈕處理
if(command.equals("新增"))
{
if(jtf.getText().length()!=0)
{
cmb.addItem(jtf.getText()); //添加項
panel.add(showInfo);
showInfo.setText("添加成功,新增了:"+jtf.getText());
}
else
{
panel.add(showInfo);
showInfo.setText("請輸入要添加星座");
}
}
}
});
//刪除按鈕處理
buttonDel.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method stub
String command=e.getActionCommand();
if(command.equals("刪除"))
{
if(cmb.getSelectedIndex()!=-1)
{
//先獲得要刪除的項的值
String strDel=cmb.getSelectedItem().toString();
cmb.removeItem(strDel); //刪除項
panel.add(showInfo);
showInfo.setText("刪除成功,刪除了:"+strDel);
}
else
{
panel.add(showInfo);
showInfo.setText("請選擇要刪除的星座");
}
}
}
});
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
new SampeDemo();//調用構造方法
}
}
運行程序如下: