Swing 常用组件
面板组件
JPanel
是一个无边框,不能被移动,放大,缩小或者关闭的面板,它的默认布局管理器是FlowLayout 可以使用构造函数 JPanel (LayoutManager layout) 或者它的 setLayout()方法为其制定布局管理器
JScrollPane
是一个带有滚动条的面板容器,而且这个面板容器只能添加一个组件,如果想向JScrollPane面板中添加多个组件应该先将这多个组件添加到某个组件中,然后再将这个组件添加到JScrollPane中
常用构造方法:
函数 | 解释 |
---|---|
JScrollPane() | 创建一个空的JScrollPane 面板 |
JScrollPane(Component view) | 创建一个显示指定组件的JScrollPane 面板,只要组件的内容超过视图大小就会显示水平和垂直滚动条 |
JScrollPane(Component view, int vsbPolicy,int hsbPolicy) | 创建一个显示指定容器,并具有指定滚动条策略的JScrollPane.参数vsbPolicy 和参数hsbPolicy 分别表示垂直滚动条策略和水平滚动条策略 |
JScrollPane 设置面板滚动策略的方法
函数 | 解释 |
---|---|
void setHorizontalBarPolicy(int policy) : | 指定水平滚动策略,即水平滚动条何时显示在滚动面板上 |
void setVerticalBarPolicy(int policy): | 指定垂直滚动条策略,即垂直滚动条何时显示在滚动面板上 |
void setViewportView(Component view): | 设置在滚动面板显示的组件 |
ScrollPaneConstants接口中声明了多个常量属性可以用来设置不同的滚动策略
属性 | 解释 |
---|---|
VERTICAL_SCROLLBAR_AS_NEEDED | 当填充的组件视图超过客户端窗口大小时,自动显示 |
HORIZONTAL_SCROLLBAR_AS_NEEDED | 水平和竖直放行滚动条(默认) |
VERTICAL_SCROLLBAR_ALWAYS | 无论填充的组件视图大小,始终显示水平和竖直方向滚动条 |
HORIZONTAL_SCROLLBAR_ALWAYS | |
VERTICAL_SCROLLBAR_NEVER | 无论填充的组件视图大小,始终不显示水平和竖直方向滚动条 |
HORIZONTAL_SCROLLBAR_NEVER |
e.g:
package Doit;
import java.awt.*;
import javax.swing.*;
public class Gui {
public static void main(String[]arge)
{
Gui gui = new Gui();
gui.createGui();
}
private void createGui()
{
//创建并设置JFrame 容器窗口
JFrame f = new JFrame("FlowLayout");
//所有组件左对齐,水平间距为20,垂直间距为30
f.setLayout(new GridLayout(3,3));
f.setSize(500,500);
f.setLocation(600, 300); // 设置窗体在界面出现的位置
JScrollPane scro = new JScrollPane();
scro.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scro.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
JPanel panel = new JPanel();
JButton but1 = new JButton("1");
panel.add(but1);
scro.setViewportView(panel);
f.add(scro,BorderLayout.CENTER);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
文本组件
文本组件用于接收用户输入的信息,其中包括文本框(JTextField),文本域(JTextArea)等,它们都有一个共同父类JTextComponent,该类是一个抽象类
函数 | 解释 |
---|---|
String getText() | 返回文本组件中所有的文本内容 |
String getSelectedText() | 返回文本组件中选定的文本内容 |
void selectAll() | 在文本组件中选中所有内容 |
void setEditable() | 设置文本组件为可编辑或者不可编辑状态 |
void setTest(String text) | 设置文本组件的内容 |
void replaceSelection(String content) | 用给定的内容替换当前选定的内容 |
JTextField
只能接收单行文本的输入
常用构造方法
函数 | 解释 |
---|---|
JTextField() | 创建一个空的文本框,初始字符串为null |
JTextField(int columns) | 创建一个具有指定列数的文本框,初始字符串为null |
JTextField(String text) | 创建一个显示指定初始字符串的文本框 |
JTextField(String text,int column) | 创建一个具有指定列数,并显示指定初始字符串的文本框 |
该类还有一个子类JPasswordField,它表示一个密码框,只能接收用户的单行输入,但是不显示,只显示 * 构造方法类似
JTextArea
JTextArea 称为文本域,它能接收多行文本的输入,构造方法如下:
函数 | 解释 |
---|---|
JTextArea() | 构造函数,创建一个空的文本域 |
JTextArea(String text) | 创建显示指定初始字符串的文本域 |
JTextArea(int rows, int columns) | 创建具有指定行和列的文本域 |
JTextArea(String text,int rows,int columns) | 创建。。。。。 |
e.g:
package Doit;
import java.awt.*;
import javax.swing.*;
public class Gui {
public static void main(String[]arge)
{
Gui gui = new Gui();
gui.createGui();
}
private void createGui()
{
JFrame f = new JFrame();
f.setLayout(new BorderLayout());
f.setSize(400,300);
f.setLocation(300, 200);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextArea area = new JTextArea(12,34);
JScrollPane scro = new JScrollPane(area);
area.setEditable(false);
JTextField input = new JTextField(20);
JButton btn = new JButton("发送");
btn.addActionListener(e ->
{
String cont = input.getText();
if (cont != null && !cont.trim().equals(""))
{
area.append("本人输入信息:" + cont + "\n");
}
else
{
area.append("聊天消息不能为空!!!" + "\n");
}
});
JPanel p = new JPanel();
JLabel label = new JLabel("聊天信息");
p.add(label);
p.add(input);
p.add(btn);
f.add(scro,BorderLayout.PAGE_START);
f.add(p,BorderLayout.PAGE_END);
}
}
标签组件
用于展示的标签组件JLabel
常用构造方法:
函数 | 解释 |
---|---|
JLabel() | 创建无图像并且标题为空字符串的JLabel |
JLabel(Icon image) | 创建具有指定图像的JLabel |
JLabel(Icon image, int horizontalAlignment) | 创建具有指定图像和水平对齐方式的JLabel |
JLabel(String text) | 创建具有指定文本的JLabel实例 |
JLabel(String text,Icon image,int horizontalAlignment) | |
JLabel(String text,int horizontalAlignment) |
e.g:
package Doit;
import java.awt.*;
import javax.swing.*;
public class Gui {
public static void main(String[]arge)
{
Gui gui = new Gui();
gui.createGui();
}
private void createGui()
{
JFrame f = new JFrame();
f.setSize(500,500);
f.setLocation(500, 300);
f.setVisible(true);
f.setLayout(new BorderLayout());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel la = new JLabel("no.1");
ImageIcon icon = new ImageIcon("1.jpg");
Image img = icon.getImage();
img = img.getScaledInstance(300, 150, Image.SCALE_DEFAULT);
icon.setImage(img);
la.setIcon(icon);
JPanel p = new JPanel();
JLabel la2 = new JLabel("welcome",JLabel.CENTER);
p.add(la2);
f.add(la,BorderLayout.PAGE_START);
f.add(p,BorderLayout.PAGE_END);
}
}
按钮组件
在Swing中常见的按钮组件有JButton,JCheckBox,JRadioButton等,它们都是抽象类
AbstractButton类的直接或间接子类,在AbstractButton类中提供了按钮组件通用的一些方法常用方法
函数 | 解释 |
---|---|
Icon getIcon() | 获取按钮的图标 |
void setIcon(Icon icon) | 设置按钮的图标 |
String getText() | 获取按钮的文本 |
void setText(String text) | 设置按钮的文本 |
void setEnable(boolean b) | 设置按钮是否可用 |
boolean setSelected(boolean b) | 设置按钮是否为选中状态 |
boolean isSelected() | 返回按钮的状态(true 为选中,反之为未选中) |
JCheckBox
复选框组件,有选中和未选中两种状态,通常复选框会有很多个,用户可以选择其中一个或者多个
函数 | 解释 |
---|---|
JCheckBox() | 创建一个没有文本信息,初始状态为未被选择的复选框 |
JCheckBox(String text) | 创建一个带有文本信息,初始状态未被选中的复选框 |
JCheckBox(String text,boolean selected) | 创建一个带有文本信息,并指定初始状态(选中/未选中)的复选框 |
e.g:
package Doit;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Gui {
public static void main(String[]arge)
{
Gui gui = new Gui();
gui.createGui();
}
private void createGui()
{
JFrame f = new JFrame();
f.setSize(500,600);
f.setLocation(500, 600);
f.setVisible(true);
f.setLayout(new BorderLayout());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel la = new JLabel("hello world!",JLabel.CENTER);
la.setFont(new Font("宋体", Font.PLAIN,20));
JPanel p = new JPanel();
JCheckBox it = new JCheckBox("itallc");
JCheckBox bo = new JCheckBox("blod");
ActionListener lis = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int mode = 0;
if(bo.isSelected()) mode += Font.BOLD;
if(it.isSelected()) mode += Font.ITALIC;
la.setFont(new Font("宋体",mode,20));
}
};
it.addActionListener(lis);
bo.addActionListener(lis);
p.add(it);
p.add(bo);
f.add(la);
f.add(p,BorderLayout.PAGE_END);
}
}
JRadioButton
为单选按钮组件,与JCheckBox复选框不同的是,单选按钮只能选中一个就像收音机上的电台控制按钮一样,按下一个另一个就会自动弹起
需要ButtonGroup类,这是一个不可见组件,可以实现单选功能
常用构造函数:
函数 | 解释 |
---|---|
JRadioButton() | 创建一个没有文本信息,初始化状态未被选中的单选框 |
JRadioButton(String text) | 创建一个带有文本信息,初始化状态未被选定的单选框 |
JRadioButton(String text,boolean selected) | 创建一个具有文本信息,并指定初始化状态(选中/未选中)的单选框 |
e.g:
package Doit;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Gui {
public static void main(String[]arge)
{
Gui gui = new Gui();
gui.createGui();
}
private void createGui()
{
JFrame f = new JFrame();
f.setSize(500,600);
f.setLocation(500, 600);
f.setVisible(true);
f.setLayout(new BorderLayout());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel la = new JLabel("hello world!",JLabel.CENTER);
la.setFont(new Font("宋体", Font.PLAIN,20));
JPanel p = new JPanel();
//创建一个按钮组组件
ButtonGroup group = new ButtonGroup();
JRadioButton it = new JRadioButton("itallc");
JRadioButton bo = new JRadioButton("blod");
group.add(it);
group.add(bo);
ActionListener lis = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int mode = 0;
if(bo.isSelected()) mode += Font.BOLD;
if(it.isSelected()) mode += Font.ITALIC;
la.setFont(new Font("宋体",mode,20));
}
};
it.addActionListener(lis);
bo.addActionListener(lis);
p.add(it);
p.add(bo);
f.add(la);
f.add(p,BorderLayout.PAGE_END);
}
}
下拉框组件
JComboBox组件被称为下拉框或者组合框,它将所有选项折叠在一起,默认显示的是第一个添加的选项。当用户单击下拉框时,会出现下拉式的选择列表,用户可以从中选择其中一项并添加,分为不可编辑下拉框组件和可编辑下拉框组件两种形式
常用构造函数
函数 | 解释 |
---|---|
JComboBox() | 创建一个没有可选项的下拉框 |
JComboBox(Object[] items) | 创建一个下拉框,将Object数组中的元素作为下拉框的下拉列表选项 |
JComboBox(Vector items) | 创建一个下拉框,将Vector集合中的元素作为下拉框的下拉列表选项 |
常用方法:
函数 | 解释 |
---|---|
void addItem(Object anObject) | 为下拉框添加选项 |
void insertItemAt(Object anObject, int index) | 在指定的索引处插入选项 |
Object getItemAt(int index) | 返回指定索引处选项,第一个选项的索引为0 |
int getItemCount() | 返回下拉框中选项的数目 |
Object getSelectedItem() | 返回当前所选项 |
void removeAllItems() | 删除下拉框中所有的选项 |
void removeItem(Object object) | 从下拉框中删除指定选项 |
void removeItemAt(int index) | 移除指定索引处的选项 |
void setEditable(boolean aFlag) | 设置下拉框的选项是否可编辑,aFlag 为true 可编辑反之不行 |
e.g:
package Doit;
import java.awt.*;
import javax.swing.*;
public class Gui {
public static void main(String[]arge)
{
Gui gui = new Gui();
gui.createGui();
}
private void createGui()
{
JFrame f = new JFrame();
f.setSize(300,300);
f.setLocation(500, 300);
f.setLayout(new BorderLayout());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
JPanel p = new JPanel();
//创建下拉组件
JComboBox<String> box = new JComboBox<>();
box.addItem("请选择城市");
box.addItem("北京");
box.addItem("成都");
box.addItem("遂宁");
box.addItem("青岛");
JTextField text = new JTextField(20);
box.addActionListener(e -> {
String item = (String) box.getSelectedItem();
if("请选择城市".equals(item))
{
text.setText(item);
}
else
{
text.setText("你选择的城市是: "+ item);
}
});
p.add(box);
p.add(text);
f.add(p,BorderLayout.PAGE_START);
}
}
菜单组件
下拉式菜单
三组件:
JMenuBar(菜单栏)
表示一个水平的菜单栏,它用来管理一组菜单,不参与交互菜单栏可以放在任何位置,通常是放在顶级容器的顶部使用(JFrame JDialog)的setMenuBar()方法,JMenuBar 有一个无参的构造函数,只需使用new就可以创建,然后调用add(JMenu c)方法为其添加JMenu 菜单
JMenu(菜单)
表示一个菜单,它用来整合管理菜单项菜单可以是单一层次,也可以是多层次结构一般使用JMenu(String text)构造函数创建text表示菜单上的文本内容
JMenu常用方法
函数 | 解释 |
---|---|
JMenuItem add(JMenuItem menuItem) | 将菜单项添加到菜单末尾,返回此菜单项 |
void addSeparator() | 将分隔符添加到菜单的末尾 |
JMenuItem getItem(int pos) | 返回指定索引处的菜单项,第一个菜单项的索引为0 |
int getItemCount() | 返回菜单上的项数,菜单项和分隔符都计算在内 |
JMenuItem insert(JMenuItem menuItem, int pos) | 指定索引处插入菜单项 |
void insertSeparator(int pos) | 在指定索引处插入分隔符 |
void remove(int pos) | 从菜单中移除指定索引处的菜单项 |
void remove(JMenuItem menuItem) | 从菜单中移除指定的菜单项 |
void removeAll() | 从菜单中移除所有的菜单项 |
JMenuItem(菜单项)
是菜单系统中最基本的组件。
在创建JMenuItem菜单项时,通常会使用JMenumItem(String text)这个构造方法为菜单项指定文本内容,JMenuItem 继承自AbstractButton类,因此可以把它看成是一个按钮,如果使用无参的构造方法创建了一个菜单项,则可以调用从AbstractButton类中继承的setText(String text)方法和setIcon()方法为其设置文本和图标
e.g:
package Doit;
import javax.swing.*;
public class Gui {
public static void main(String[]arge)
{
Gui gui = new Gui();
gui.createGui();
}
private void createGui()
{
JFrame f = new JFrame("JF窗口");
f.setSize(500, 600);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocation(500, 300);
JMenuBar meu = new JMenuBar();
JMenu m1 = new JMenu("文件(N)");
JMenu m2 = new JMenu("帮助(H)");
meu.add(m1);
meu.add(m2);
JMenuItem t1 = new JMenuItem("新建(N)");
JMenuItem t2 = new JMenuItem("退出(X)");
m1.add(t1);
m1.addSeparator();
m1.add(t2);
t1.addActionListener(e ->
{
JDialog dialog = new JDialog(f,"无标题",true);
dialog.setSize(200,100);
dialog.setLocation(300,200);
dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
dialog.setVisible(true);
});
t2.addActionListener(e->System.exit(0));
f.setJMenuBar(meu);
}
}
弹出式菜单
就是单击鼠标右键会出现一个菜单,这就是弹出式菜单
JPopupMenu
和下拉式菜单一样通过调用add()方法来添加菜单项,但它默认是不可见如果想要显示出来,则必须调用它的show(Component invoker,int x,int y)invoker 表示JPopupMenu 菜单显示位置的参考组件,x和y表示invoker组件坐标空间中的一个坐标,显示的是JPopupMenu菜单的左上角坐标
e.g:
package Doit;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Gui {
public static void main(String[]arge)
{
Gui gui = new Gui();
gui.createGui();
}
private void createGui()
{
JFrame f = new JFrame("JF窗口");
f.setSize(500, 600);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocation(500, 300);
JPopupMenu pop = new JPopupMenu();
JMenuItem t1 = new JMenuItem("查看");
JMenuItem t2 = new JMenuItem("刷新");
pop.add(t1);
pop.addSeparator();
pop.add(t2);
f.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if(e.getButton() == MouseEvent.BUTTON3)
{
pop.show(e.getComponent(),e.getX(),e.getY());
}
}
});
}
}