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类的主要方法有以下几种。

  1. JMenu():建立一个空白标题的菜单
  2. JMenu(String s):建立一个指定标题的菜单,标题由参数s决定
  3. public void add(JMenuItem item):向菜单增加由参数item指定的菜单选项
  4. public JMenuItem getItem(int n):得到指定索引的菜单选项
  5. 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);
        }
}

来看看运行结果

java jframe控件大全 java常用控件_visual studio code

文本区JTextArea

Swing 中的 JTextArea 类是专门用来建立文本区的,即 JTextArea 创建的一个对象称为一个文本区。用户可以在文本区输入多行文本。 JTextArea 类的主要方法如下。

  1. JTextArea :使用这个构造方法创建文本区,则文本区的可见列数和行数取默认值。文本区有水平和垂直滚动条
  2. JTextArea (string s) :使用这个构造方法创建文本区,则文本区的初始字符串为 s,文本区有水平和垂直滚动条
  3. JTextArea (nt. int y):使用这个构造方法创建文本区,文本区可见行数和列数分别为 x 和 y ,文本区有水平滚动条和垂直滚动条
  4. public void set Text (String s):文本区调用该方法可以将文本区中的文本设置为参数 s 指定的文本,文本区中先前的文本将被清除
  5. public String get Text ():文本区调用该方法可以获取文本区中的文本
  6. public void insert (String s int x):文本区调用该方法可以在指定位置 x 处插入指定文本 s ,x 是指距文本区开始处字符的个数, x 不能大于文本区中的字符个数
  7. public void replaceRange (String s, int start, int end):文本区调用该方法可以用指定的新文本 s 替换从指定位置 start 开始到指定位置 end 结束的文本, start 和 end 不能大于文本区中字符的个数
  8. public void append (String s):在文本区调用该方法可以在文本区中添加文本
  9. int getCarePosition :文本区调用该方法可以获取文本区中输入光标的位置
  10. public void setCaretPosition (int position):文本区调用该方法可以设置文本区中输人光标的位置,其中, position 不能大于文本区中字符的个数
  11. public void selectAll ():文本区调用该方法选中文本中全部文本
  12. 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 ();
    } 
}

运行结果如下

java jframe控件大全 java常用控件_java_02

下拉列表JList

JComponent的子类JComboBox()创建的对象叫做下拉列表

常用方法

  1. public JComboBox():创建一个没有选项的下拉列表
  2. public void addItem (Object anObject):下拉列表调用该方法增加选项
  3. public int getSelectedIndex ():返回当前下拉列表中被选中的选项的索引
  4. public Object getSelectedltem ():返回当前下拉列表中被选中的选项
  5. public void removeltemAt (int anlndex):从下拉列表的选项中删除索引值是 anlndex 的选项
  6. public void removeAllItems ():可以删除全部选项
  7. public void addItemListener ( ItemListener ):向下拉列表注册 ltemEvent 事件的监听器

下拉列表上的ItemEvent事件

  1. 发生 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 )+"");
        }
       }
      }
    
}

运行结果

java jframe控件大全 java常用控件_java_03