您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
【第18章:图形界面】_下拉列表框:JComboBox
发布时间:2021-01-18 18:02:14编辑:雪饮阅读()
实现一个下拉框
用javax.swing.JcomboBox类可以实例化一个下类框实例
import javax.swing.JFrame ;
import java.awt.Container ;
import java.awt.GridLayout ;
import javax.swing.JComboBox ;
import javax.swing.JLabel ;
import javax.swing.BorderFactory ;
import java.util.Vector ;
class MyComboBox{
private JFrame frame = new JFrame("Welcome TO kasumi") ;
private Container cont = frame.getContentPane() ; // 得到容器
private JComboBox jcb1 = null;
private JComboBox jcb2 = null ;
public MyComboBox(){
this.frame.setLayout(new GridLayout(2,1)) ;
String nations[] = {"中国","巴西","美国","韩国","意大利","法国"} ;
Vector<String> v = new Vector<String>() ;
v.add("kasumi") ;
v.add("snowDrink") ;
v.add("ayane") ;
// 实例化下拉列表框
this.jcb1 = new JComboBox(nations) ;
this.jcb2 = new JComboBox(v) ;
// 为每一个下拉框增加一个边框
this.jcb1.setBorder(BorderFactory.createTitledBorder("你喜欢去那个国家旅游?")) ;
this.jcb2.setBorder(BorderFactory.createTitledBorder("选择你喜欢的角色?")) ;
cont.add(this.jcb1) ;
cont.add(this.jcb2) ;
this.frame.setSize(300,150) ;
this.frame.setVisible(true) ;
}
}
public class Hello{
public static void main(String args[]) throws Exception{
new MyComboBox() ;
}
};
使用javax.swing.ComboBoxModel抽象类实现下拉框
import javax.swing.JFrame ;
import java.awt.Container ;
import java.awt.GridLayout ;
import javax.swing.JComboBox ;
import javax.swing.AbstractListModel ;
import javax.swing.BorderFactory ;
import javax.swing.ComboBoxEditor ;
import javax.swing.ComboBoxModel ;
import java.util.Vector ;
class MyComboBoxModel extends AbstractListModel implements ComboBoxModel{
private String nations[] = {"中国","巴西","美国","韩国","意大利","法国"} ;
private String item = null ;
public Object getSelectedItem(){ // 得到选择的选项
return this.item ;
}
public void setSelectedItem(Object anItem){ // 设置选项
this.item = (String)anItem ;
}
public int getSize(){
return this.nations.length ;
}
public Object getElementAt(int ind){
return this.nations[ind] ;
}
}
class MyComboBox{
private String defaultMsg = "请选择或输入国家的名称。" ;
private JFrame frame = new JFrame("Welcome TO kasumi") ;
private Container cont = frame.getContentPane() ;
// 实例化下拉列表框
private JComboBox jcb1 = new JComboBox(new MyComboBoxModel()) ;
private JComboBox jcb2 = null ;
public MyComboBox(){
this.frame.setLayout(new GridLayout(1,1)) ; // 定义排版
//让下拉框可编辑(则可以下拉选择也可以输入,其实下拉框中进行输入的操作我个人比较鄙视,感觉很奇葩的操作)
this.jcb1.setEditable(true) ;
// 为每一个下拉框增加一个边框
this.jcb1.setBorder(BorderFactory.createTitledBorder("你喜欢去那个国家旅游?")) ;
//得到编辑对象才可以指定默认值。使得下拉框可编辑则要给输入处一个编辑器并预置一个默认编辑值
ComboBoxEditor editor = this.jcb1.getEditor() ;
this.jcb1.configureEditor(editor,defaultMsg) ;
//设置下拉列表项最大可见列表项目数,超过此数就要通过下拉滚动条滚动后才可以看到
this.jcb1.setMaximumRowCount(3) ;
cont.add(this.jcb1) ;
this.frame.pack();
this.frame.setSize(180,150) ;
this.frame.setVisible(true) ;
}
}
public class Hello{
public static void main(String args[]) throws Exception{
new MyComboBox() ;
}
};
下拉框选项选择事件监听
要实现下拉框选项选项事件的监听,需要实现两个接口,接口java.awt.event.ItemListener与接口java.awt.event.ActionListener
import javax.swing.JFrame ;
import java.awt.Container ;
import java.awt.Font ;
import java.awt.event.ActionListener ;
import java.awt.event.ItemListener ;
import java.awt.event.ItemEvent ;
import java.awt.event.ActionEvent ;
import java.awt.GridLayout ;
import javax.swing.JComboBox ;
import javax.swing.JLabel ;
import javax.swing.ComboBoxEditor ;
class MyComboBox implements ItemListener,ActionListener{
private JFrame frame = new JFrame("Welcome TO kasumi") ;
private String defaultMsg="输入或选择一个字号";
private Container cont = frame.getContentPane() ;
private JComboBox jcb1 = null ;
private JLabel label = new JLabel("www.kasumi.cn") ;
private String fontSize[] = {"10","12","14","16","18","20","22","24","26","48","72"} ;
public MyComboBox(){
this.frame.setLayout(new GridLayout(2,1)) ;
this.jcb1 = new JComboBox(fontSize);
//监听下拉选项或输入值
this.jcb1.addItemListener(this) ;
this.jcb1.addActionListener(this) ;
this.jcb1.setEditable(true);
ComboBoxEditor editor = this.jcb1.getEditor() ;
this.jcb1.configureEditor(editor,defaultMsg) ;
this.jcb1.setMaximumRowCount(3) ;
//设置默认字号
this.changeFontSize(12) ;
cont.add(this.jcb1) ;
cont.add(label) ;
this.frame.setSize(300,150) ;
this.frame.setVisible(true) ;
}
public void itemStateChanged(ItemEvent e){
//当发生了状态变化,判断该状态是选中状态还是去除选中状态。每个option都会触发该事件,则这里只针对状态改变为选中状态的进行处理
if(e.getStateChange()==ItemEvent.SELECTED){
String itemSize = (String)e.getItem() ;
try{
this.changeFontSize(Integer.parseInt(itemSize)) ;
}catch(Exception e1){
}
}
}
/**
*一般情况下,这是在编写GUI程序时,组件发生“有意义”的事件时会调用这个方法,比如按钮被按下,文本框内输入回车时都会触发这个事件,然后调用你编写的事件处理程序。
*/
public void actionPerformed(ActionEvent e){
String item = (String)this.jcb1.getSelectedItem() ;
int size = 12 ; // 设置一个默认大小
try{
size = Integer.parseInt(item) ;
}catch(Exception e1){}
this.changeFontSize(size) ;
// 判断给定的size是否存在,如果不存在则需要将新的内容设置上去(用户输入的值不存在于下拉框中则自动将该输入值增加到下拉框中)
if(!this.isExists(item))
{
this.jcb1.addItem(jcb1.getSelectedItem()) ;
}
}
public boolean isExists(String item){
boolean flag = false ;
for(int i=0;i<this.jcb1.getItemCount();i++){
//getItemAt方法用于获取下拉框中某个option(根据索引)
if(item.equals(this.jcb1.getItemAt(i))){
flag = true ;
}
}
return flag ;
}
public void changeFontSize(int size){
Font fnt = new Font("Serief",Font.BOLD,size) ;
this.label.setFont(fnt) ;
}
}
public class Hello{
public static void main(String args[]) throws Exception{
new MyComboBox() ;
}
};
关键字词:java,下拉框,JComboBox