/* 为组件添加事件 */ /* 添加组件 */ c.add(jl1); c.add(jc1);
/* 设置窗体属性 */
this.setTitle(\下拉列表\); this.setSize(260, 150); Dimension screenSize =
Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((screenSize.width - this.getWidth()) / 2, (screenSize.height - this.getHeight()) / 2); this.setResizable(false);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } }
class MyComboBoxModel extends AbstractListModel implements ComboBoxModel {
String selecteditem = null;
String[] test = { \身份证\, \军人证\, \学生证\, \工作证\ };
public int getSize() { return test.length; }
public Object getElementAt(int index) { return test[index]; }
public void setSelectedItem(Object anItem) { selecteditem = (String) anItem; }
public Object getSelectedItem() { return selecteditem; } }
运行结果如下:
? 列表框组件Jlist
列表框(JList)与下拉列表框的区别不仅表现在外观上,当激活下拉列表框时,会出现下拉列表框中的内容,但列表框只是在窗体上占据固定的大小,如果需要列表框具有滚动效果,可以将列表框放入滚动面板。用户在选择列表框中的某一项时,按住Shift键并选择列表框中的其他项目,则当前选项和其他项目之间的选项也将全部被选中;也可以按住Ctrl键并单击列表框中的单个项目,这样可以使列表框中被单击的项目反复切换非选中状态或选中状态。
Swing中使用JList类对象来表示列表框,常用的构造方法如下: public JList();
public JList(Object[] listData); public JList(Vector listData);
public JList(ListModel dataModel);
在上述构造方法中,存在一个没有参数的构造方法,可以在初始化列表框后使用setListData()方法对列表框进行设置,同时也可以在初始化的过程中对列表框中的项目进行设置。设置的方式有3种类型,包括数组、Vector类型和ListModel模型。
当使用数组作为构造方法的参数时,首先需要创建列表项目的数组,然后再利用构造方法来初始化列表框。
String[] str={\列表1\,\列表2\,\列表3\,\列表4\,\列表5\,\列表6\}; JList jl1=new JList(str);
使用Vector类型的数据作为初始化JList组件的参数。 Vector V=new Vector(); JList jl=new JList(V); V.add(“列表1”); V.add(“列表2”); V.add(“列表3”); V.add(“列表4”);
如果使用ListModel模型作为参数,需要创建ListModel对象。ListModel是Swing包中的一个接口,它提供了获取列表框属性的方法。但是在通常情况下,为了使用户不完全实现ListModel接口中的方法,通常自定义一个类继承实现该接口的抽象类AbstractListModel。在这个类中提供了getElementAt()方法与getSize()方法,其中getElementAt()方法代表根据项目的索引获取列表框中的值,而getSize()方法用于获取列表框中的项目个数。 例子
import java.awt.*; import javax.swing.*;
public class Test extends JFrame { /* 定义组件 */
private JList jl1;
private JScrollPane mb1;
public static void main(String[] args) { Test T = new Test(); // 创建本类对象 T.setVisible(true); // 设置显示窗体 }
public Test() {
Container c = this.getContentPane(); /* 设置窗体布局管理器 */ c.setLayout(null); /* 创建组件 */
String[] str={\列表1\,\列表2\,\列表3\,\列表4\,\列表5\,\列表6\};
jl1=new JList(str);
mb1=new JScrollPane(jl1); /* 设置组件属性 */
mb1.setBounds(10, 10, 60, 100); /* 为组件添加事件 */ /* 添加组件 */ c.add(mb1);
/* 设置窗体属性 */
this.setTitle(\下拉列表\); this.setSize(150, 150); Dimension screenSize =
Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((screenSize.width - this.getWidth()) / 2, (screenSize.height - this.getHeight()) / 2); this.setResizable(false);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } }
运行结果如下:
十、文本组件
文本组件在实现项目开发使用最为广泛,尤其是文本框与密码框组件,通过文本组件可以很轻松地处理单行文字、多行文字、口令字段。在本节中将探讨文本组件的定义以及使用。 ? 文本框组件JTextField
文本框(JTextField)用来显示或编辑一个单行文本,在Swing中通过javax.swing.JTextField类对象创建,该类继承了javax.swing.text.JTextComponent类。文本框常用的构造方法如下: public JTextField()。 public JTextField(String text)。 public JTextField(int fieldwidth)。 public JTextField(String text,int fieldwidth)。 public JTextField(Document docModel,String text,int fieldwidth)。 例子
import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*;
public class Test extends JFrame { /* 定义组件 */
private JTextField jt1; private JButton an1; private JPanel mb1,mb2;
public static void main(String[] args) { Test T = new Test(); // 创建本类对象 T.setVisible(true); // 设置显示窗体 }
public Test() {
Container c = this.getContentPane(); /* 设置窗体布局管理器 */
c.setLayout(new GridLayout(2,1)); /* 创建组件 */
jt1=new JTextField(\请输入\,20); an1=new JButton(\清除\);
mb1=new JPanel(); mb2=new JPanel(); /* 设置组件属性 */ /* 为组件添加事件 */
jt1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
jt1.setText(\触发事件\); //将文本设置为:触发事件 an1.requestFocusInWindow(); //按钮请求焦点 } });
an1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jt1.setText(null); //将文本框的内容清除
jt1.requestFocusInWindow(); //文本框请求焦点
} });
/* 添加组件 */ mb1.add(jt1); mb2.add(an1); c.add(mb1); c.add(mb2);
/* 设置窗体属性 */
this.setTitle(\下拉列表\); this.setSize(250, 130); Dimension screenSize =
Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((screenSize.width - this.getWidth()) / 2, (screenSize.height - this.getHeight()) / 2); this.setResizable(false);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } }
运行结果如下:
注:jt1.setEnabled(false)语句可以将文本框设置成不可用状态,如下图:
? 密码框组件JPasswordField