Java Swing组件下拉菜单控件JComboBox用法示例

时间:2022-09-23 11:06:03

本文实例讲述了java swing组件下拉菜单控件jcombobox用法。分享给大家供大家参考,具体如下:

jcombobox是swing中的下拉菜单控件。它永远只能选中一个项目,然而比单选按钮节省空间。如果使用seteditable设置为true则内部选项的文本可以编辑,因此这种组件被称为组合框。注意,对选项的编辑只会影响当前项,而不会改变列表内容。可以使用additem方法来添加选项列表,或者使用insertitemat在任何位置插入选项;然而如果有大量选项需要添加,这种方法是非常笨重的,可以先构造一个defaultcomboboxmodel,使用addelement加载选项,最后在调用jcombobox的setmodel方法。

常用方法如下:

Java Swing组件下拉菜单控件JComboBox用法示例

示例代码:

jcomboboxbasicusedemo.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package awtdemo;
import java.awt.borderlayout;
import java.awt.font;
import java.awt.event.actionevent;
import java.awt.event.actionlistener;
import java.awt.event.itemevent;
import java.awt.event.itemlistener;
import javax.swing.jcombobox;
import javax.swing.jframe;
import javax.swing.jlabel;
import javax.swing.event.popupmenuevent;
import javax.swing.event.popupmenulistener;
/*
 * 演示jcombobox的基本用法,以及事件响应
 */
public class jcomboboxbasicusedemo extends jframe{
  private static final long serialversionuid = -8161981948004677531l;
  int default_width = 600;
  int default_height = 400;
  private jlabel label;
  private jcombobox<string> facecombo;
  private static final int fontsize = 12
  @suppresswarnings("unused")
    public jcomboboxbasicusedemo(){
    settitle("jcomboboxdemo - www.zzvips.com");
    setsize(default_width, default_height);
    //添加label
    label = new jlabel("欢迎来到服务器之家 www.zzvips.com");
    label.setfont(new font("serif",font.plain, fontsize));
    add(label, borderlayout.center);
    //actionlistener
    actionlistener actionlistener = new actionlistener(){
      public void actionperformed(actionevent e) {
        if(e.getsource() instanceof jcombobox){
          @suppresswarnings({ "unchecked", "rawtypes" })
          jcombobox<string> combobox = (jcombobox)e.getsource();
          string fontname = combobox.getselecteditem().tostring();
          label.setfont(new font(fontname, font.plain, fontsize));
          system.out.printf("%s%n", "actionperformed called");
        }
      }
    };
    //popupmenulistener
    popupmenulistener popupmenulistener = new popupmenulistener() {
      @override
      public void popupmenucanceled(popupmenuevent e) {
        system.out.println("下拉菜单取消");
      }
      @suppresswarnings("unchecked")
            @override
      public void popupmenuwillbecomeinvisible(popupmenuevent e) {
        system.out.println("下拉菜单合上");
        jcombobox<string> source = (jcombobox<string>)e.getsource();
      }
      @override
      public void popupmenuwillbecomevisible(popupmenuevent e) {
        system.out.println("下拉菜单弹出");
      }
    };
    //itemlistener
    itemlistener itemlistener = new itemlistener() {
      @override
      public void itemstatechanged(itemevent arg0) {
        // todo auto-generated method stub
        if(itemevent.selected == arg0.getstatechange()){
          string selecteditem = arg0.getitem().tostring();
          label.setfont(new font(selecteditem, font.plain, fontsize));
          system.out.printf("new selected item : %s%n",selecteditem);
        }
        if(itemevent.deselected == arg0.getstatechange()){
          string selecteditem = arg0.getitem().tostring();
          system.out.printf("deselected item : %s%n",selecteditem);
        }
      }
      };
    //添加一个jcombobox
    facecombo = new jcombobox<string>();
    facecombo.seteditable(true);
    //facecombo.addactionlistener(actionlistener);
    //facecombo.addpopupmenulistener(popupmenulistener);
    facecombo.additemlistener(itemlistener);
    facecombo.setenabled(true);
    facecombo.additem("serif");
    facecombo.additem("sansserif");
    facecombo.additem("monospaced");
    facecombo.additem("dialog");
    facecombo.additem("dialoginput");
    add(facecombo, borderlayout.south);
  }
  public static void main(string[] args) {
    // todo auto-generated method stub
    //创建窗体并指定标题
    jcomboboxbasicusedemo frame = new jcomboboxbasicusedemo();
    //关闭窗体后退出程序
    frame.setdefaultcloseoperation(jframe.exit_on_close);
    //自动适配所有控件大小
    //frame.pack();
    //设置窗体位置在屏幕*
    frame.setlocationrelativeto(null);
    //显示窗体
    frame.setvisible(true);
  }
}

本程序的基本功能是,通过选择不同的item而相应地改变界面中的英文字体(如本例中的www.zzvips.com)。运行效果如下:

Java Swing组件下拉菜单控件JComboBox用法示例

下面分析jcombobox的事件响应。程序中使用了3个不同的事件响应函数,他们具有不同的特性。

actionlistener:它在eclipse和netbeans两个不同的ide中表现出了不同的效果- -。在eclipse中,每当选中新节点时被激活;而在netbeans中,选择新节点时它总会被激活两次。

popupmenulistener:它将选择节点的过程细分为3种类型:下拉菜单弹出;下拉菜单合上;下拉菜单取消。当点开下拉菜单,然后放弃选择时,则下拉菜单取消、下拉菜单合上两个事件先后被激活。

itemlistener:将节点的事件分为2种类型:selected和deselected。对于每种事件,均可以调用getitem()方法来获取相应节点。

因此,如果业务逻辑只关心最新被选中的节点,那么使用itemlistener是比较合适的。希望本文所述对大家java程序设计有所帮助。

原文链接:http://www.cnblogs.com/pzy4447/p/4641463.html