很多与AWT类似.

事件处理参考:Java学习笔记--AWT事件处理

1.设计模式:

模型:存储内容
视图:显示内容
控制器:处理用户输入·

2. 文本输入常用组件

2.1 文本域:

JLabel labelname = new JLabel("username");
JTextArea textname = new JTextArea(1,40);//参数也可以为("默认字符",行,列);
JPanel panel = new JPanel();
panel.add(labelname);
panel.add(textname);

如果需要在运行时重新设定列数,需要调用包含这个文本框的容器的revalidate方法,可以重新设定容器的尺寸。
textField.setColumns(10);
panel.revalidate();

2.2 标签:JLabel
容纳文本的组件,没有任何修饰,不能响应用户输入。
可以选择内容的排列方式,可以用SwingConstants接口中的常量,如LEFT, RIGHT, CENTER, NORTH, EAST.
JLabel labelname = new JLabel("username",SwingConstants.RIGHT);

2.3 密码域:JPasswordField
JPasswordField(String text , int columns); //创建一个新的密码域
char[] getPassword() //返回密码域中的文本

2.4 文本区:
用户的输入超过一行是,也可以用JTextArea,
textArea = nwe JTextArea(8,40); //8行40列的文本区
注:用户不会受限于输入指定的行列,输入过长时,文本会滚动。
可以开启换行特性避免裁剪过长的行 textArea.setLineWrap(true);

2.5 滚动条:
在Swing中,文本区没有滚动条,需要时可以将文本区插入到滚动窗格中
textArea = new JTextArea(8,40);
JScrollPane scrollPane = new JScrollPane(textArea);

链接JScrollPane的使用http://pan.baidu.com/s/1ntHWVMx

例子

public class MySwingModel {
public static void main(String args[]){
JFrame frame = new JFrame();
frame.setSize(450,450);
frame.setLayout(new BorderLayout(10,10));//设置布局管理器 //////////////////// PART SOUTH ///////////////////////
//每个JButton对象都存储了一个按钮模型对象,可以这样得到它的引用
JButton mbutton = new JButton("我的按钮");
ButtonModel mode1 = mbutton.getModel(); JPanel panelSouth = new JPanel();//新建面板
panelSouth.add(mbutton); //将按钮加入面板 /////////////////// PART NORTH/////////////////////////
//指定文本域的行数、列数
JLabel labelname = new JLabel("username",SwingConstants.CENTER);
final JTextArea textname = new JTextArea("默认用户名,请删除后输入用户名",1,20); String strpassword = null;
JLabel labelpassword = new JLabel("password",SwingConstants.CENTER);
final JPasswordField textpassword = new JPasswordField(strpassword,40);
//char [] mypassword = textpassword.getPassword();//获取密码 JPanel panelNorth = new JPanel();//创建网格布局的面板,添加用户名、密码
panelNorth.setLayout(new GridLayout(2,2,10,10));
panelNorth.add(labelname);
panelNorth.add(textname);
panelNorth.add(labelpassword);
panelNorth.add(textpassword); ////////////////// PART CENTER //////////////////////
final JTextArea textwords = new JTextArea(15,40);
textwords.setLineWrap(true);//开启换行特性,避免文本过长
JScrollPane textscrollPane = new JScrollPane(textwords);//新建滚动窗格,当行数过大时显示滚动条 ////////////////// 设置按钮响应 ///////////////////////
mbutton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent mEvent){
String myName = textname.getText();
char[] mypassword = textpassword.getPassword();//获取密码
textwords.setText("用户名:"+myName+"\n密码:"+new String(mypassword));
}
}); /////////////////////////////////////////////////////
frame.add(panelSouth,BorderLayout.SOUTH); //将面板加入框架
frame.add(panelNorth,BorderLayout.NORTH);
frame.add(textscrollPane,BorderLayout.CENTER); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true); }
}

  

3. 选择组件

3.1 复选框

复选框需要一个紧邻它的标签说明用途
JCheckBox bold = new JCheckBox("bold");

可以使用setSelected方法选定/取消复选框
bold.setSelected(true);

isSelected方法返回每个复选框当前状态。true/false
两个复选框可用同一监听器
bold.addActionListener(listener);
italic.addActionListener(listener);

public class MySwingChoose {
public static void main(String args[]){
JFrame frame = new JFrame();
frame.setSize(450,450);
frame.setLayout(new BorderLayout(10,10));  //设置布局管理器 final JCheckBox bold = new JCheckBox("Bold");
final JCheckBox italic = new JCheckBox("Italic");
final JLabel labelSelect = new JLabel();  //显示选择了哪些选项 ActionListener mylistener = new ActionListener(){
public void actionPerformed(ActionEvent e) {
String strIsselect ="";
if(bold.isSelected()==true){
strIsselect+="Bold已选择"; }if(italic.isSelected()==true){
strIsselect+="Italic已选择";
}
labelSelect.setText(strIsselect);
}
};
bold.addActionListener(mylistener);
italic.addActionListener(mylistener); JPanel panel = new JPanel();
panel.add(bold);
panel.add(italic);
panel.add(labelSelect); frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

  

3.2 单选按钮组 JRadioButton

实现单选按钮组
为单选按钮组构造一个ButtonGroup对象
将JRadionButton类型的对象添加到按钮组中

public class MySwingRadio {
public static void main(String args[]){
JFrame frame = new JFrame();
frame.setSize(450,450);
frame.setLayout(new BorderLayout(10,10));//设置布局管理器 //创建单选按钮组
ButtonGroup mbuttongroup = new ButtonGroup(); //创建单选按钮
JRadioButton jradioSmall = new JRadioButton("small",false);
JRadioButton jradioMedium = new JRadioButton("medium",false);
JRadioButton jradioLarge = new JRadioButton("large",false); //将单选按钮添加到按钮组
mbuttongroup.add(jradioSmall);
mbuttongroup.add(jradioMedium);
mbuttongroup.add(jradioLarge); //将按钮添加到面板
JPanel panel = new JPanel();
panel.add(jradioSmall);
panel.add(jradioMedium);
panel.add(jradioLarge); //将面板添加到框架,而不是单选按钮组添加到框架
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true); }
}

另一种实现方式,(不错的例子,可以直接设定监听器)

public class MySwingRadio2 {
private final static int DEFAULT_SIZE = 36;
//创建单选按钮组
private static ButtonGroup mbuttongroup = new ButtonGroup();
//创建面板
static JPanel panel = new JPanel();
static JLabel mlabel = new JLabel("");
public static void main(String args[]){
JFrame frame = new JFrame();
frame.setSize(450,450);
frame.setLayout(new BorderLayout(10,10));//设置布局管理器 //将单选按钮添加到按钮组
addRadioButton("small",8);
addRadioButton("medium",16);
addRadioButton("large",32); //将面板添加到框架,而不是单选按钮组添加到框架
frame.add(mlabel,BorderLayout.CENTER);
frame.add(panel,BorderLayout.NORTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
} public static void addRadioButton(final String name,final int size){
boolean selected = (size == DEFAULT_SIZE);
//新建单选按钮
JRadioButton button = new JRadioButton(name,selected);
//将单选按钮添加到单选按钮组
mbuttongroup.add(button);
//将单选按钮添加到面板
panel.add(button); //设定监听器,在标签中显示点击的单选 按钮
ActionListener mylistener = new ActionListener(){
public void actionPerformed(ActionEvent e){
mlabel.setText(name);
}
};
button.addActionListener(mylistener);
}
}

3.3 边框 Border  javax.swing.border

调用BorderFactory的静态方法创建边框  

BroderFactory.createLineBorder(Border border)
BroderFactory.createCompoundBorder(Border border)
BroderFactory.createTitledBorder(Border border)

所有的方式见javax.swing下面的类BorderFactory

调用JComponent类中setBorder方法将结果边框添加到组件

Border etched = BorderFactory.createEtchedBorder()
Border titled = BorderFactory.createTitledBorder(etched,"A Title")
panel.setBorder(titled)

框架可以组合。

示例代码

public class MySwingText {
public static void main(String args[]){
JFrame frame = new JFrame();
frame.setSize(450,450);
frame.setLayout(new BorderLayout(10,10));//设置布局管理器
JPanel panel = new JPanel();
Border etched = BorderFactory.createEtchedBorder();
Border titled = BorderFactory.createTitledBorder(etched,"A Title");
panel.setBorder(titled); frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

  

 3.4组合框 JComboBox<>

创建组合框 : 
JComboBox<String> faceCombo = new JConboBox<>();

调用setEditable方法让组合框可编辑

获取当前选项 :getSelectedItem 
若组合框不可编辑,最好调用 : faceCombo.getItemAt(faceCombo.getSelectedIndex())
addItem方法添加选项 : faceCombo.addItem("Serif");
在任意位置插入选项 : faceCombo.insertItemAt("Monospaced",0);

删除选项:
faceCombo.removeItem("Monospaced");
faceCombo.removeItemAt(0);

示例

UseComboBox.java

public class UseComboBox {
public static void main(String[] args) {
ComboBoxFrame cbframe = new ComboBoxFrame();
cbframe.setVisible(true);
cbframe.setSize(400,400);
cbframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

 ComboBoxFrame.java

public class ComboBoxFrame extends JFrame{
private JComboBox<String> faceCombo;
private JLabel label;
private static final int DEFAULT_SIZE =24; public ComboBoxFrame(){
//添加文字标签
label = new JLabel("我的标签文字");
label.setFont(new Font("Serif",Font.PLAIN,DEFAULT_SIZE));
add(label,BorderLayout.CENTER); //添加组合框
faceCombo = new JComboBox(); //创建组合框
faceCombo.addItem("Serif");//添加条目
faceCombo.addItem("SansSerif");
faceCombo.addItem("MonoSpaced");
faceCombo.addItem("Dialog");
faceCombo.addItem("DialogInput");
//为组合框设置监听器
faceCombo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
label.setFont(new Font(faceCombo.getItemAt(faceCombo.getSelectedIndex()),
Font.PLAIN,DEFAULT_SIZE));
}
}); //将组合框添加到panel
JPanel comboPanel = new JPanel();
comboPanel.add(faceCombo);
add(comboPanel,BorderLayout.SOUTH);
pack();
}
}

3.5 滑动条 JSlider

JSlider slider = new JSlider(min,max,initialValue);

4.  菜单

4.1菜单创建

(1) 创建菜单栏 : JMenuBar menubar = new JMenuBar();
(2) 将菜单栏添加到框架上: frame.setJMenuBar(menuBar);
(3) 为每一个菜单建立一个菜单对象: JMenu editMenu = new JMenu("Edit");
(4) 将顶层菜单添加到菜单栏中: menuBar.add(editMenu);

(5) 向(3)中的菜单对象添加菜单项
  JMenuItem pasteItem = new JMenuItem("Paste");
  editMenu.add(pasteItem);//添加菜单项
  editMenu.addSparator();//添加分隔符
  JMenu optionMenu = ... ; //a submenu
  editMenu.add(optionMenu);可以看到分隔符位于Paste和Read-only菜单项之间

 动作监听

为每个菜单项JMenuItem安装一个动作监听器

ActionListener listener = ...;
pasteItem.addActionListener(listener);

可以使用 JMenu.add(String s)方法将菜单项插入到菜单的尾部
editMenu.add("Paste");
ADD方法返回创建的子菜单项,可以采用下列方法获取它,并添加监听器:

JMenuItem pasteItem = editMenu.add("Paste");
pasetItem.addActionListener(listener);

在通常情况下,菜单项出发的命令也可以通过其他用户界面元素(如工具栏上的按钮)激活。通常,采用扩展抽象类AbstractAction来定义一个实现Action接口的类。这里需要在AbstractAction对象的构造器中指定菜单项标签并且覆盖actionPerformed方法来获得菜单动作处理器。

Action exitAction = new AbstractAction("Edit"){
public void actionPerformed(ActionEvent event){
//动作代码
System.exit(0);
}
};

然后将动作添加到菜单中

JMenuItem exitItem = fileMenu.add(exitAction);

这个命令利用动作名将一个菜单项添加到菜单中,这个动作对象将作为它的监听器 。

上面这条语句是下面两条语句的快捷形式:

JMenuItem exitItem = new JMenuItem(exitAction);
fileMenu.add(exitItem);

 示例代码 

public class MyJMenu {
public static void main(String[] args) {
JFrame mframe = new JFrame(); JMenuBar menubar = new JMenuBar();//创建菜单栏 //////////////////////// 菜单对象1 //////////////////////////
JMenu editMenu = new JMenu("Edit");//为每一个菜单建立一个菜单对象
menubar.add(editMenu);//将菜单添加到菜单栏
//-- 菜单项1 --//
JMenuItem pasteItem = new JMenuItem("Paste");
editMenu.add(pasteItem);//添加菜单项
editMenu.addSeparator();//添加分隔符 //-- 菜单项2 --//
JMenuItem readonlyItem = new JMenuItem("Read-Only");
editMenu.add(readonlyItem);//添加菜单项 ////////////////////////菜单对象2 //////////////////////////
JMenu sourceMenu = new JMenu("Source");
menubar.add(sourceMenu);
editMenu.addSeparator();//添加分隔符
////////////////////////菜单对象3 //////////////////////////
Action exitAction = new AbstractAction("exit"){
public void actionPerformed(ActionEvent event){
//动作代码
System.exit(0);
}
};
JMenuItem exitItem = editMenu.add(exitAction);
/*
* 上面这条语句是下面两条语句的快捷形式:
* JMenuItem exitItem = new JMenuItem(exitAction);
* editMenu.add(exitItem);
* */
////////////////////////////////////////////////////////////
mframe.setJMenuBar(menubar);//菜单栏添加到框架上
mframe.setSize(450, 300);
mframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mframe.setVisible(true);
}
}

代码效果

Java学习笔记--Swing用户界面组件的更多相关文章

  1. Java学习笔记--Swing

    1.创建框架 AWT中Frame类用来描述顶层窗口,在Swing中,这个类的名为JFrame,它从Frame类扩展. JFrame是少数几个在Swing不用绘制在画布上的组件之一,因此,它的修饰部件( ...

  2. Java核心技术卷一基础知识-第9章-Swing用户界面组件-读书笔记

    第9章 Swing用户界面组件 本章内容: * Swing与模型-视图-控制器设计模式 * 布局管理概述 * 文本输入 * 选择组件 * 菜单 * 复杂的布局管理 * 对话框 本章将介绍构造功能更加齐 ...

  3. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  4. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  5. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  6. 20145230《java学习笔记》第九周学习总结

    20145230 <Java程序设计>第9周学习总结 教材学习内容 JDBC JDBC简介 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作, ...

  7. Java学习笔记之---方法和数组

    Java学习笔记之---方法与数组 (一)方法 (1)什么是方法? 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 (2)方法的优点 使程序变得更简短而 ...

  8. Java学习之Swing Gui编程

    Java学习之Swing Gui编程 0x00 前言 前面的使用的Gui是基于Awt 去进行实现,但是在现实写Gui中 AWT实际运用会比较少. 0x01 Swing 概述 AWT 和Swing 区别 ...

  9. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

随机推荐

  1. Spark学习笔记--概念知识

    RDD被视为由不同的数据块组成,对于RDD的存取是以数据块为单位的,本质上分区(partition)和数据块(block)是等价的,只是看待的角度不同. 数据块 Spark存储管理模块中所管理的几种主 ...

  2. SQL Fetch size

    JDBC performance tuning with optimal fetch size February 1, 2009 31 Comments Tuning performance usin ...

  3. POJ3683 Falsita

    http://poj.org/problem?id=3683 思路:2-SAT,输出任意一组方案,O(m+n) #include<cstdio> #include<iostream& ...

  4. Altium Designer BGA扇出,原理图中PCB的类和布线规则设置

    本帖隐藏的内容 第一,Altium Designer 认识了这么久,没有用过他的自动扇出功能,今天一试,效果还算不错,不过现在还没有找到不扇出没有网络的引脚的方法,我现在讲我的自动扇出步骤给大家说一下 ...

  5. SQL基础理论题

    sql理论题 1.触发器的作用? 答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的.它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化.可以 ...

  6. android使用BlueStacks作为模拟器

    android原生的模拟器启动比较慢,偶尔还会出现一些莫名的问题,我们除了可以使用我们的android手机来进行调试外,还可以使用第三方的android模拟器,例如BlueStacks模拟器: 相对原 ...

  7. VC++中的类的内存分布(上)

    0.序 目前正在学习C++中,对于C++的类及其类的实现原理也挺感兴趣.于是打算通过观察类在内存中的分布更好地理解类的实现.因为其实类的分布是由编译器决定的,而本次试验使用的编译器为VS2015 RC ...

  8. MyBatis魔法堂:Insert操作详解

    一.前言 数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二. insert元素 属性详解 其属性如下: parameterType:入参的全限 ...

  9. 将Maven项目转换成Eclipse支持的Java项目

    当我们通过模版(比如最简单的maven-archetype-quikstart插件)生成了一个maven的项目结构时,如何将它转换成eclipse支持的java project呢? 1. 定位到mav ...

  10. mysql 从data文件恢复数据库

    安装在D:\mysql\mysql-5.6.24-winx64下的mysql 由于系统坏了,移到另外一台机器上启动 步骤如下 1.复制以前的mysql安装文件及data文件下:2.全新安装mysql3 ...