JAVA常用控件(二)
- 菜单JMenu
- 菜单栏
- 菜单
- 菜单项
- 嵌入子菜单
- 菜单上的图标
- 文本区JTextArea
- 下拉列表JList
- 常用方法
- 下拉列表上的ItemEvent事件
菜单JMenu
它是图形用户的常用组件,其具有一定的存在意义。在Swing中多个菜单可以放在菜单栏上,JFrame、JApplet和JDialog及其派生 类都可以放置到菜单组件,调用setJMenuBar()方法,通过传入参数JMenuBar对象创建菜单栏。通常将菜单JMenu添加到JMenuBar上,而子菜单JMenuItem添加到JMenu上,这样通过一步步组装,最后在容器上创建一个菜单组件。而JMenuItem组件可以设置ActionListener监听器,用以触发子菜单被选中的事件。
菜单栏
JComponent类的子类JMenuBer负责创建菜单栏,JFrame类有一个将菜单栏放到窗口中的方法:
setJMenuBar(JMenuBar bar);
该方法将菜单栏添加到窗口的顶端。
菜单
JComponent类的子类JMenu负责创建菜单,JMenu类的主要方法有以下几种。
- JMenu():建立一个空白标题的菜单
- JMenu(String s):建立一个指定标题的菜单,标题由参数s决定
- public void add(JMenuItem item):向菜单增加由参数item指定的菜单选项
- public JMenuItem getItem(int n):得到指定索引的菜单选项
- public int getItemCount():得到菜单选项的数目
菜单项
JComponent类的子类JMenuItem负责创建菜单项,其主要方法有以下几种。
6. JMenuItem(String s):构造有标题的菜单项
7. JMenuItem(String text, Icon icon):构造有标题的菜单项以及有图标的菜单项
8. publlic void setEnabled(boolean b):设置当前菜单项是否可被选择
9. public String getText():得到菜单选项的名字
5.public void setText(String name):设置菜单选项的名字为参数name指定的字符串
6.public void setAccelerator(KeyStroke keyStroke):为菜单设置快捷键
嵌入子菜单
JMenu时JMenuItem的子类,因此菜单本身也就是一个菜单项,把一个菜单看作菜单项添加到某个菜单中时,这样的菜单被称为子菜单
菜单上的图标
图标Icon声明一个图标,使用其子类ImageIcon类创建一个图标
如:Icon icon = new ImageIcon(“a.gif”);
上一段代码来试一试
myfrist.java
punlic class myfrist{
public static viod main(String args[]){
WindowMenu win = new WindowMenu();
}
}
WindowMenu.java
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package com.mycompany.mytwo;
import javax.swing.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import static javax.swing.JFrame.*;
/**
*
* @author GF-forever
*/
public class WindowMenu extends JFrame{
JMenuBar menubar;
JMenu menu,subMenu;
JMenuItem iteml,item2;
private JMenuItem item1;
public WindowMenu(){
init();
this.setBounds(50, 50, 300, 200);
this.setVisible(true);
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
void init() {
setTitle("带菜单的窗体");
menubar = new JMenuBar();
menu = new JMenu("菜单");
subMenu = new JMenu("子菜单");
item1 = new JMenuItem("菜单项1",new ImageIcon("a.gif"));
item2 = new JMenuItem("菜单项1",new ImageIcon("b.gif"));
item1.setAccelerator(KeyStroke.getKeyStroke("A"));
item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
menu.add(item1);
menu.addSeparator();
menu.add(item2);
menu.add(subMenu);
subMenu.add(new JMenuItem("子菜单里的菜单项",new ImageIcon("c.gif")));
menubar.add(menu);
setJMenuBar(menubar);
}
}
来看看运行结果
文本区JTextArea
Swing 中的 JTextArea 类是专门用来建立文本区的,即 JTextArea 创建的一个对象称为一个文本区。用户可以在文本区输入多行文本。 JTextArea 类的主要方法如下。
- JTextArea :使用这个构造方法创建文本区,则文本区的可见列数和行数取默认值。文本区有水平和垂直滚动条
- JTextArea (string s) :使用这个构造方法创建文本区,则文本区的初始字符串为 s,文本区有水平和垂直滚动条
- JTextArea (nt. int y):使用这个构造方法创建文本区,文本区可见行数和列数分别为 x 和 y ,文本区有水平滚动条和垂直滚动条
- public void set Text (String s):文本区调用该方法可以将文本区中的文本设置为参数 s 指定的文本,文本区中先前的文本将被清除
- public String get Text ():文本区调用该方法可以获取文本区中的文本
- public void insert (String s int x):文本区调用该方法可以在指定位置 x 处插入指定文本 s ,x 是指距文本区开始处字符的个数, x 不能大于文本区中的字符个数
- public void replaceRange (String s, int start, int end):文本区调用该方法可以用指定的新文本 s 替换从指定位置 start 开始到指定位置 end 结束的文本, start 和 end 不能大于文本区中字符的个数
- public void append (String s):在文本区调用该方法可以在文本区中添加文本
- int getCarePosition :文本区调用该方法可以获取文本区中输入光标的位置
- public void setCaretPosition (int position):文本区调用该方法可以设置文本区中输人光标的位置,其中, position 不能大于文本区中字符的个数
- public void selectAll ():文本区调用该方法选中文本中全部文本
- addTextListener (TextListener):文本区调用该方法可以向文本区增加文本监听器
来看看代码吧
myFrame.java
public class myFrame{
public static void main ( String args []){
EditWindow win = new EditWindow ();
win.setTitle ("含有文本区的窗体");
win.setVisible ( true );
}
}
EditWindow.java
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package com.mycompany.mytwo;
import javax . swing .*;
import java . awt . event .*;
import java . awt .*;
/**
*
* @author GF-forever
*/
public class EditWindow extends JFrame implements ActionListener{
private JMenuBar menubar ; private JMenu menu ;
private JSplitPane splitPane ;
private JMenuItem itemCopy , itemCut , itemPaste ; private JTextArea text ;
EditWindow (){
init();
setBounds (150,160,280,290);
setDefaultCloseOperation ( JFrame . DISPOSE_ON_CLOSE );
}
void init(){
menubar = new JMenuBar ();
menu = new JMenu ("编辑");
itemCopy = new JMenuItem ("复制");
itemCut = new JMenuItem ("剪切"); itemPaste = new JMenuItem ("粘贴"); menu . add ( itemCopy );
menu . add ( itemCut );
menu . add ( itemPaste );
menubar . add ( menu );
setJMenuBar ( menubar );
text = new JTextArea ();
add ( new JScrollPane ( text ), BorderLayout . CENTER );
itemCopy . addActionListener ( this );
itemCut . addActionListener ( this );
itemPaste . addActionListener ( this );
}
public void actionPerformed ( ActionEvent e ){
if ( e . getSource ()== itemCopy )
text . copy ();
else if ( e . getSource ()== itemCut )
text . cut ();
else if ( e . getSource ()== itemPaste )
text . paste ();
}
}
运行结果如下
下拉列表JList
JComponent的子类JComboBox()创建的对象叫做下拉列表
常用方法
- public JComboBox():创建一个没有选项的下拉列表
- public void addItem (Object anObject):下拉列表调用该方法增加选项
- public int getSelectedIndex ():返回当前下拉列表中被选中的选项的索引
- public Object getSelectedltem ():返回当前下拉列表中被选中的选项
- public void removeltemAt (int anlndex):从下拉列表的选项中删除索引值是 anlndex 的选项
- public void removeAllItems ():可以删除全部选项
- public void addItemListener ( ItemListener ):向下拉列表注册 ltemEvent 事件的监听器
下拉列表上的ItemEvent事件
- 发生 ItemEvent 事件的事件源注册监听器的方法是 addltemListener (ltemListener
listener)
2.处理ItemEvent事件的接口是 ItemListener 接口方法 public void itemStateChanged (ItemEvent e)
下面上一段代码来试一下
mytwo.java
public class mytwo{
public static void main(String args[]{
WindowList win = new WindowList();
}
}
WindowList.java
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package com.mycompany.mytwo;
import java . awt . FlowLayout ;
import javax . swing . JFrame ;
import javax . swing . JList ;
import javax . swing . JScrollPane ;
import javax . swing . JTextArea ;
import javax.swing.event.ListSelectionEvent;
/**
*
* @author GF-forever
*/
public class WindowList extends JFrame{
private JList < String >jList1;
private JScrollPane jScrollPanel ;
private JScrollPane jScrollPane2;
private JTextArea jTextAreal ;
public WindowList (){
jScrollPanel = new JScrollPane ();
jList1= new JList <>();
jScrollPane2= new JScrollPane ();
jTextAreal = new JTextArea ();
jTextAreal = new JTextArea();
setDefaultCloseOperation ( javax . swing . WindowConstants . EXIT_ON_CLOSE );
jList1. setModel ( new javax . swing . AbstractListModel < String >(){
String [] strings = {" Item 1"," Item 2"," Item 3"," Item 4"," Item 5"};
public int getSize () {
return strings.length ;
}
public String getElementAt ( int i ){
return strings [ i ];
}
});
jList1.addListSelectionListener( new javax . swing . event . ListSelectionListener (){
public void valueChanged ( javax . swing . event . ListSelectionEvent evt ){
jList1valueChanged( evt );
}
private void jList1valueChanged(ListSelectionEvent evt) {
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
}
});
jScrollPanel . setViewportView (jList1);
jTextAreal . setColumns (20);
jTextAreal . setRows (5);
jScrollPane2. setViewportView ( jTextAreal );
this . setLayout ( new FlowLayout ());
this . add ( jTextAreal ); this . add (jList1);
this . setBounds (200,100,600,400);
this . setTitle (" JList 列表演示"); this . setVisible ( true );
}
private void jList1ValueChanged( javax . swing . event . ListSelectionEvent evt ){
// TODO add your handl ing code here
this . jTextAreal . setText ("");
if (! evt . getValueIsAdjusting ()){
int [] selectIndex = this .jList1. getSelectedIndices ();
System . out . println ("");
for ( int i : selectIndex ){
System . out . print ( i +",");
this . jTextAreal . append ( this .jList1. getModel (). getElementAt ( i )+"");
}
}
}
}
运行结果