欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java的GUI编程之列表和组合框的设计使用

程序员文章站 2024-03-06 23:49:44
列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择。 列表 列表(jlist)在界面中表现为列表框,是jlist类或它的子类的对...

列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择。
列表

列表(jlist)在界面中表现为列表框,是jlist类或它的子类的对象。程序可以在列表框中加入多个文本选择项条目。列表事件的事件源有两种:
一是鼠标双击某个选项:双击选项是动作事件,与该事件相关的接口是actionlistener,注册监视器的方法是addactionlistener(),接口方法是actionperformed(actionevent e)。
二是鼠标单击某个选项:单击选项是选项事件,与选项事件相关的接口是listselectionlistener,注册监视器的方法是addlistselectionlistener,接口方法是valuechanged(listselectionevent e)。

jlist 类的常用构造方法:

  • jlist():建立一个列表。
  • jlist(string list[]):建立列表,list是字符串数组,数组元素是列表的选择条目。

jlist类的常用方法:

  • getselectedindex():获取选项的索引。返回最小的选择单元索引;只选择了列表中单个项时,返回该选择。
  • getselectedvalue():获取选项的值。
  • getselectedindices():返回所选的全部索引的数组(按升序排列)。
  • getselectedvalues(),:返回所有选择值的数组,根据其列表中的索引顺序按升序排序。
  • getitemcount():获取列表中的条数。
  • setvisiblerowcount(int n):设置列表可见行数。
  • setselectionmode(int selemode):设置列表选择模型。选择模型有单选和多选两种。
  • 单选:listselectionmodel.single_selection.
  • 多选:listselectionmodel.multiple.interval_selection.
  • remove(int n):从列表的选项菜单中删除指定索引的选项。
  • removeall():删除列表中的全部选项。

列表可以添加滚动条,列表添加滚动条的方法是先创建列表,然后再创建一个jscrollpane滚动面板对象,在创建滚动面板对象时指定列表。以下代码示意为列表list2添加滚动条:

  jscrollpane jsp = new jscrollpane(list2);

【例】小应用程序有两个列表,第一个列表只允许单选,第二个列表允许多选。

import java.applet.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class mywindow extends jframe implements listselectionlistener{
  jlist list1,list2;
  string news[]={"人民日报","新民晚报","浙江日报","文汇报"};
  string sports[]={"足球","排球","乒乓球","篮球"};
  jtextarea text;
  mywindow(string s){
    super(s);
    container con = getcontentpane();
    con.setbackground(color.blue);
    con.setlayout(new gridlayout(2,2));
    con.setsize(200,500);
    list1 = new jlist(news);
    list1.setvisiblerowcount(3);
    list1.setselectionmode(listselectionmodel.single_selection);
    list1.addlistselectionlistener(this);
    list2 = new jlist(sports);
    list2.setvisiblerowcount(2);
    list2.setselectionmode(listselectionmodel.multiple_interval_selection);
    list2.addlistselectionlistener(this);
    con.add(list1);
    con.add(list2);
    text= new jtextarea(10,20);
    con.add(text);
    this.setvisible(true);
    this.pack();
  }
  public void valuechanged(listselectionevent e){// 每当选择值发生更改时调用
    if(e.getsource()==list1){
      text.settext(null);
      object listvalue = ((jlist) e.getsource()).getselectedvalue();
      string selename = listvalue.tostring();
      for(int i=0;i<news.length;i++)
        if(news[i].equals(selename)){
          text.append(selename+ "被选中\n");
        }
    }
    else if(e.getsource()==list2){
      text.settext(null);
      int templist[] =list2.getselectedindices();
      for(int i=0;i<templist.length;i++)
        text.append(sports[templist[i]] + "被选中\n");
     }
   }
 }
public class example6_3 extends applet{
  mywindow mywin = new mywindow("列表示例");
}

组合框

组合框(jcombobox)是文本框和列表的组合,可以在文本框中输入选项,也可以单击下拉按钮从显示的列表中进行选择。

组合框的常用构造方法:

  • jcombobox():建立一个没有选项的jcombobox对象。
  • jcombobox(jcomboboxmodel amodel):用数据模型建立一个jcombobox对象。
  • jcombobox(object[]items):利用数组对象建立一个jcombobox对象。

组合框的其他常用方法有以下几个:

  • additem(object obj):向组合框加选项。
  • getitemcount():获取组合框的条目总数。
  • removeitem(object ob):删除指定选项。
  • removeitemat(int index):删除指定索引的选项。
  • insertitemat(object ob,int index):在指定的索引处插入选项。
  • getselectedindex():获取所选项的索引值(从0开始)。
  • getselecteditem():获得所选项的内容。
  • seteditable(boolean b):设为可编辑。组合框的默认状态是不可编辑的,需要调用本方法设定为可编辑,才能响应选择输入事件。

在jcombobox对象上发生事件分为两类。一是用户选定项目,事件响应程序获取用户所选的项目。二是用户输入项目后按回车键,事件响应程序读取用户的输入。第一类事件的接口是itemlistener;第二类事件是输入事件,接口是actionlistener。

【例】一个说明组合框用法的应用程序。程序中声明的组合框子类实现itemlister接口和actionlistener接口。组合框子类的窗口中设置了一个文本框和一个组合框,组合框中有三个选择。实现接口的监视方法将组合框的选择结果在文本框中显示。

public class example6_4{
  public static void main(string args[]){
    comboboxdemo mycomboboxgui = new comboboxdemo();
  }
}
class comboboxdemo extends jframe implements actionlistener,itemlistener{
  public static final int width = 350;
  public static final int height = 150;
  string prolist[] = { "踢足球","打篮球","打排球" };
  jtextfield text;
  jcombobox combobox;
  public comboboxdemo(){
    setsize(width,height);
    settitle("组合框使用示意程序");
    container conpane = getcontentpane();
    conpane.setbackground(color.blue);
    conpane.setlayout(new flowlayout());
    combobox = new jcombobox(prolist);
    combobox.addactionlistener(this);
    combobox.additemlistener(this);
    combobox.seteditable(true);//响应键盘输入
    conpane.add(combobox);
    text = new jtextfield(10);
    conpane.add(text);
    this.setvisible(true);
  }
  public void actionperformed(actionevent e){
    if(e.getsource()==combobox)
      text.settext(combobox.getselecteditem().tostring());
  }
  public void itemstatechanged(itemevent e){
    if(e.getsource()==combobox){
      text.settext(combobox.getselecteditem().tostring());
    }
  }
}