一.简介
GUI的核心技术:Swing AWT
现在GUI逐渐被淘汰,因为:
为什么我们要学习?
视频教程:5、3种布局管理器_哔哩哔哩_bilibili
二.AWT
(1).frame
// 实例化frame类
Frame frame = new Frame("这个一个框");
// 设置可见性
frame.setVisible(true);
// 设置窗口大小
frame.setSize(500, 500);
// 设置窗口背景颜色,实例化Color类
frame.setBackground(new Color(50, 70, 300));
// 设置窗口的弹出位置
frame.setLocation(300, 300);
// 设置窗口大小不可拖动改变
frame.setResizable(false);
效果:
问题:无法关闭窗口,停止java程序
多个frame
我们先写一个frame的封装类:
import java.awt.*;
public class MyFrame extends Frame {
// 静态序号,计算窗口个数
static int id = 0;
// 使用构造函数初始化弹出属性
// 初始化的属性有大小,弹出位置,背景颜色
public MyFrame(int x, int y, int w, int h, Color color) {
// 计算窗口个数
super("myFrame"+(++id));
// 设置窗口可视化
setVisible(true);
// 设置窗口大小与弹出位置,使用Bounds可以同时设置
setBounds(x, y, w, h);
// 设置窗口背景颜色
setBackground(color);
}
}
再写测试类:
public class Application {
public static void main(String[] args) {
MyFrame myFrame1 = new MyFrame(100, 100, 400, 400, Color.black);
MyFrame myFrame2 = new MyFrame(500, 100, 400, 400, Color.red);
MyFrame myFrame3 = new MyFrame(100, 500, 400, 400, Color.blue);
MyFrame myFrame4 = new MyFrame(500, 500, 400, 400, Color.green);
}
}
效果:
(2).panel 面板
// 先完成窗口的设置
Frame frame = new Frame();
frame.setVisible(true);
frame.setBounds(300, 300, 500, 500);
frame.setBackground(new Color(128, 253, 190));
// 将组件的布局设置为空布局,使你能够手动控制组件的位置和大小。
frame.setLayout(null);
// 面板的设置与窗口一样,但是面板在窗口里面要注意位置与大小
// Panel是面板,可以放在窗口中,不能单独存在
Panel panel = new Panel();
frame.setVisible(true);
panel.setBounds(50, 50, 400, 400);
panel.setBackground(new Color(238, 47, 142));
// 添加面板进窗口,
frame.add(panel);
效果:
解决无法关闭窗口停止java程序,可以使用下面的方法看不懂跳过后面还会再讲
package com.demo.panel;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class PanelTest {
public static void main(String[] args) {
panelTest();
}
public static void panelTest() {
// 先完成窗口的设置
Frame frame = new Frame();
frame.setVisible(true);
frame.setBounds(300, 300, 500, 500);
frame.setBackground(new Color(128, 253, 190));
// 将组件的布局设置为空布局,使你能够手动控制组件的位置和大小。
frame.setLayout(null);
// 面板的设置与窗口一样,但是面板在窗口里面要注意位置与大小
// Panel是面板,可以放在窗口中,不能单独存在
Panel panel = new Panel();
frame.setVisible(true);
panel.setBounds(50, 50, 400, 400);
panel.setBackground(new Color(238, 47, 142));
// 添加面板进窗口,
frame.add(panel);
// 设置窗口关闭,可以自己写一个窗口监听
// 监听事件:监听窗口关闭事件 关闭:System.exit(0)
// 适配器模式:用Adapter类重写方法 只有一个方法的监听接口没有适配器
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// 窗口点击关闭的时候需要做的事,退出程序
System.exit(0);
}
});
}
}
前面我们使用的是空布局,如下
// 将组件的布局设置为空布局,使你能够手动控制组件的位置和大小。
frame.setLayout(null);
1.流式布局:从左到右从上到下
public static void main() {
Frame frame = new Frame();
// 按钮
Button button1 = new Button("按钮1");
Button button2 = new Button("按钮2");
Button button3 = new Button("按钮3");
// FlowLayout:流式布局 从左到右从上到下
// frame.setLayout(new FlowLayout(FlowLayout.LEFT));// 向左
// frame.setLayout(new FlowLayout()); // 中间
frame.setLayout(new FlowLayout(FlowLayout.RIGHT));// 向右
// 设置可见度与大小
frame.setVisible(true);
frame.setSize(200,200);
// 添加按钮
frame.add(button1);
frame.add(button2);
frame.add(button3);
}
2.空间布局: 东西南北中
public static void main() {
Frame frame1 = new Frame("BorderLayout布局");
// 组件--按钮
Button east = new Button("East");
Button west = new Button("West");
Button south= new Button("South");
Button north = new Button("North");
Button center = new Button("Center");
// 设置可见度与大小
frame1.setVisible(true);
frame1.setSize(200,200);
// 添加按钮
// BorderLayout:空间布局 东西南北中 南北是拉满的 有南北的情况下左右不一定拉满了
frame1.add(east,BorderLayout.EAST);
frame1.add(west,BorderLayout.WEST);
frame1.add(south,BorderLayout.SOUTH);
frame1.add(north,BorderLayout.NORTH);
frame1.add(center,BorderLayout.CENTER);
}
3.网格布局: 几行几列 根据多少,列会产生变化
public static void main() {
Frame frame2 = new Frame("GridLayout布局");
//组件--按钮
Button button1 = new Button("1");
Button button2 = new Button("2");
Button button3 = new Button("3");
Button button4 = new Button("4");
Button button5 = new Button("5");
Button button6 = new Button("6");
//设置布局GridLayout new GridLayout(行,列,行间隔,列间隔)
frame2.setLayout(new GridLayout(3,2));
// 设置可见度
frame2.setVisible(true);
// 添加按钮
frame2.add(button1);
frame2.add(button2);
frame2.add(button3);
frame2.add(button4);
frame2.add(button5);
frame2.add(button6);
// 使用pack()方法可以自动调节大小和布局大小
frame2.pack();
}
思路讲解:6、课堂练习讲解及总结_哔哩哔哩_bilibili
public static void main() {
// 一.外层窗口
Frame frame3 = new Frame();
// 设置可见度,弹出位置,大小,颜色
frame3.setVisible(true);
frame3.setBounds(200,200,200,300);
frame3.setBackground(Color.BLACK);
// 设置布局
frame3.setLayout(new GridLayout(2,1));
// 二.设置四个面板
// 上面的面板
Panel p1 = new Panel(new BorderLayout());
// 上面中间的面板
Panel p2 = new Panel(new GridLayout(2,1));
// 下面的面板
Panel p3 = new Panel(new BorderLayout());
// 下面中间的面板
Panel p4 = new Panel(new GridLayout(2,2));
// 三.设计上面的面板
p1.add(new Button("上左"),BorderLayout.WEST);
p1.add(new Button("上右"),BorderLayout.EAST);
p2.add(new Button("上中一"));
p2.add(new Button("上中二"));
p1.add(p2,BorderLayout.CENTER);
// 四.设计下面的面板
p3.add(new Button("下左"),BorderLayout.WEST);
p3.add(new Button("下右"),BorderLayout.EAST);
for (int i = 0; i < 4; i++) {
p4.add(new Button("for-"+i));
}
p3.add(p4,BorderLayout.CENTER);
// 五.将上下拼凑起来
frame3.add(p1);
frame3.add(p3);
frame3.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// 窗口点击关闭的时候需要做的事,退出程序
System.exit(0);
}
});
}
由于中文的字符编码问题,我的结果中的中文没有显示出来,全部变成了正方形
package com.demo.panel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class ActionEventTest {
public static void main(String[] args) {
actionEventTest();
}
// 事件监听 按下按钮 触发一些事件
public static void actionEventTest() {
// 1.窗口与布局
Frame frame = new Frame("开始-停止");
frame.setVisible(true);
frame.setLayout(new GridLayout(2,1));
// 2.按钮
Button button1 = new Button("start");
Button button2 = new Button("stop");
// 4.设置按钮信息
button1.setActionCommand("start");
// 5.实例化myMonitor与,两个按钮同用一个事件
myMonitor myMonitor = new myMonitor();
button1.addActionListener(myMonitor);
button2.addActionListener(myMonitor);
// 6.按钮添加到窗口
frame.add(button1);
frame.add(button2);
frame.pack();
// 8.调用关闭窗口事件
windowClose(frame);
}
// 7.关闭窗口的事件,单独写成一个方法
private static void windowClose(Frame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
// 3.按钮事件监听器,需要实现ActionListener接口,并重新actionPerformed方法
class myMonitor implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("按钮button被点击了:"+e.getActionCommand());
}
}
package com.demo.panel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestTest01 {
public static void main(String[] args) {
// 调用构造器
new MyFrame();
}
}
class MyFrame extends Frame{
// 构造器(无参)
public MyFrame() {
//设置窗口的标题
//利用super访问父类构造方法
super("请输入密码");
TextField textField = new TextField();
// 因为继承了Frame,使用方法可以直接调用
add(textField);
//监听这个文本框输入的文字
textField.addActionListener(new MyActionListenerTextField());
// 设置替换编码
textField.setEchoChar('*');
// 设置窗口
setBounds(200,200,200,200);
setVisible(true);
}
}
class MyActionListenerTextField implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//获得一些资源,返回一个对象 向下转型e.getSource()的返回值是object
TextField textField = (TextField) e.getSource();
// 获得输入框的文本
System.out.println(textField.getText());
// 换行清空与后台显示密码
textField.setText("");
}
}
package com.demo.panel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CalcTest {
public static void main(String[] args) {
new MyCalcTest().loadFrame();
}
}
class MyCalcTest extends Frame{
// 调用父类构造设置标题
public MyCalcTest() {
super("简单加法计算器");
}
TextField num1,num2,num3;
public void loadFrame() {
// 设置小组件
num1 = new TextField(10);
num2 = new TextField(10);
num3 = new TextField(20);
Button button = new Button("=");
Label label = new Label("+");
// 布局
setLayout(new FlowLayout());
setVisible(true);
pack();
add(num1);
add(label);
add(num2);
add(button);
add(num3);
// 监听按钮
button.addActionListener(new MyCalcListener());
}
// 内部类实现监听
public class MyCalcListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// 实现加法,使用包装类将String类型转换成int
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
// 两数相加,回车输出结果
num3.setText(""+(n1+n2));
}
}
}
package com.demo.panel;
import java.awt.*;
public class PaintTest {
public static void main(String[] args) {
new MyPaintTest().loadPaint();
}
}
class MyPaintTest extends Frame{
// 画板
public void loadPaint() {
setTitle("Paint");
setBounds(200,200,600,500);
setVisible(true);
}
// 画笔,重写paint()方法
//画笔方法 paint创建窗口后,默认只执行一次
@Override
public void paint(Graphics g) {
// 选择颜色
g.setColor(Color.GREEN);
// 选择图像
g.fillOval(100,100,100,100);
// 养成习惯,画笔用完,将它还原成最初的颜色
g.setColor(Color.black);
}
}
package com.demo.panel;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
public class MouseListenerTest {
public static void main(String[] args) {
new MyFrame2("画画");
}
}
class MyFrame2 extends Frame{
// 需要一个集合来存储画笔画出点的(X,Y)坐标
ArrayList points;
// 设置画板(窗口)
public MyFrame2(String s) {
// 调用父类的构造器,参数为名字
super(s);
setBounds(200,200,400,300);
setVisible(true);
// 存储点的坐标
points = new ArrayList<>();
// 鼠标监听器,正对这个画板(窗口)
addMouseListener(new MyMouseListener());
}
// 画笔
@Override
public void paint(Graphics g) {
// 利用迭代器遍历,读取点的坐标
Iterator iterator = points.iterator();
while (iterator.hasNext()){
Point point=iterator.next();
// 设置颜色与点的大小
g.setColor(Color.PINK);
g.fillOval(point.x,point.y,10,10);
}
}
// 将点添加到画板上
public void addPaint(Point point) {
points.add(point);
}
// 适配器模式
private class MyMouseListener extends MouseAdapter{
// 鼠标监听事件:按下 弹起 按住不放
@Override
public void mousePressed(MouseEvent e) {
// 鼠标按下时,运行这个方法
MyFrame2 myFrame2=(MyFrame2) e.getSource();
// 添加画点坐标
myFrame2.addPaint(new Point(e.getX(),e.getY()));
//因为paint方法只会自动调用一次,所以通过repaint刷新后重新调用paint方法
//每次点击鼠标都需要重新画一次
repaint();
}
}
}
package com.demo.panel;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class WindowTest {
public static void main(String[] args) {
new WindowFrame();
}
}
class WindowFrame extends Frame {
public WindowFrame() {
setBackground(Color.cyan);
setBounds(200, 200, 300, 200);
setVisible(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println("点击x关闭");
System.exit(0);
}
@Override
public void windowActivated(WindowEvent e) {
// 窗口激活事件:也就是当你点击到这个窗口内时,就是窗口激活了
// 鼠标点击窗口外的地方(窗口变灰了),也就是离开了窗口
WindowFrame source = (WindowFrame) e.getSource();
source.setTitle("被再次激活了");
System.out.println("windowActivated");
}
});
}
}
package com.demo.panel;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class KeyListenerTest {
public static void main(String[] args) {
new KeyFrame();
}
}
class KeyFrame extends Frame{
public KeyFrame() {
setBounds(200,200,200,200);
setVisible(true);
// 在这个窗口监听键盘事件
this.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
// 读取键盘
int keyCode = e.getKeyCode();
// 输出
System.out.println((char) keyCode);
// 如果按到a就fuck
if (keyCode == KeyEvent.VK_A ) {
System.out.println("fuck");
}
}
});
}
}
三.Swing
package com.demo.panel;
import javax.swing.*;
import java.awt.*;
public class JFrameTest {
public static void main(String[] args) {
new MyJFrame().init();
}
}
class MyJFrame extends JFrame{
// 使用init初始化窗口
public void init() {
// 由于继承关系,有些设置是一样的
setTitle("fuck");
setBounds(200,200,200,200);
setVisible(true);
// 设置字体,后面参数是设置为居中显示
JLabel jLabel = new JLabel("Fuck",SwingConstants.CENTER);
// 将字体添加到窗口
add(jLabel);
// 获取一个容器,容器的颜色才是真正的颜色,这点与Frame不同
Container container = this.getContentPane();
container.setBackground(Color.yellow);
// 关闭事件
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
用来被弹出,默认有关闭事件
package com.demo.panel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JDialogTest {
public static void main(String[] args) {
new JDialogSwingTest();
}
}
class JDialogSwingTest extends JFrame {
public JDialogSwingTest() {
// 基础设置
setTitle("主窗口");
setVisible(true);
setBounds(100,100,400,800);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 容器:放东西
Container container = getContentPane();
// 设置为绝对布局:组件大小固定,不可改变,组件的大小必须设置
container.setLayout(null);
// 按钮启动弹出
JButton jButton = new JButton("Fuck");
jButton.setBounds(30,30,100,50);
// 监听器
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new MyDialog();
}
});
// 将按钮放进容器
container.add(jButton);
}
// 弹窗
private class MyDialog extends JDialog {
public MyDialog() {
// 弹窗的基础设置
setTitle("fuck");
setVisible(true);
setBounds(200,500,300,300);
// 对于弹窗来说不用再设置退出监听了,默认可以直接退出
// 设置了绝对布局,组件就必须设置大小
Container container = getContentPane();
container.setLayout(null);
// 将字体放进容器
JLabel jLabel1=new JLabel("JDialog弹窗",SwingConstants.CENTER);
jLabel1.setBounds(0,0,400,400);
container.add(jLabel1);
}
}
}
package com.demo.panel;
import javax.swing.*;
import java.awt.*;
public class IconTest extends JFrame implements Icon {
private int width,height;
public IconTest() {
}
public IconTest(int width, int height) {
this.width = width;
this.height = height;
}
public static void main(String[] args) {
new IconTest().init();
}
public void init(){
// 设置标签
JLabel label = new JLabel("标签图标", new IconTest(10, 10), SwingConstants.CENTER);
// 放进容器
Container container = this.getContentPane();
container.add(label);
// 设置窗口
this.setBounds(10,10,400,800);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
// 参数为组件,画笔,大小
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
//画笔 画图标 创建对象后,默认自动画一次
g.fillOval(x,y,width,height);
}
@Override
public int getIconWidth() {
return this.width;
}
@Override
public int getIconHeight() {
return this.height;
}
}
二.将图片放进标签
package com.demo.panel;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class IconDemoTest extends JFrame {
public IconDemoTest(){
// 标签设置
JLabel label = new JLabel("ImageIcon",SwingConstants.CENTER);
// 获取图片的地址,找到ImageIcon_类的同级目录下的1.jpg文件
URL url = IconDemoTest.class.getResource("one.jpg");
ImageIcon imageIcon = new ImageIcon(url);
label.setIcon(imageIcon);
// 容器
Container container = getContentPane();
container.add(label);
// 面板
setBounds(100,100,400,400);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new IconDemoTest();
}
}
类加载器问题:ClassLoader的getResourceAsStream方法使用及在java和web项目中的路径问题_loader.getresourceasstream-CSDN博客
JPanel
package com.demo.panel;
import javax.swing.*;
import java.awt.*;
public class JPanelTest extends JFrame {
public JPanelTest() {
// 容器
Container container = this.getContentPane();
container.setLayout(new GridLayout(2,1,10,10));
// 四个面板与添加按钮
JPanel panel1 = new JPanel(new GridLayout(1, 3));
JPanel panel2 = new JPanel(new GridLayout(1, 2));
JPanel panel3 = new JPanel(new GridLayout(2, 1));
JPanel panel4 = new JPanel(new GridLayout(3,2));
panel1.add(new JButton("1"));
panel1.add(new JButton("1"));
panel1.add(new JButton("1"));
container.add(panel1);
panel2.add(new JButton("2"));
panel2.add(new JButton("2"));
container.add(panel2);
panel3.add(new JButton("3"));
panel3.add(new JButton("3"));
container.add(panel3);
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
container.add(panel4);
// 窗口
this.setVisible(true);
this.setSize(800,800);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JPanelTest();
}
}
滑动面板JScrollPane
package com.demo.panel;
import javax.swing.*;
import java.awt.*;
public class JScrollPaneTest extends JFrame {
public JScrollPaneTest() throws HeadlessException {
// 容器
Container container = this.getContentPane();
// 设置一个文本域 文本域可以换行,而文本框不行
// 设置起始行列数,行列可变化
JTextArea textArea = new JTextArea(20,30);
textArea.setText("滑动面板的文本域,有换行功能");
// JScrollPane面板
JScrollPane scrollPane = new JScrollPane(textArea);
container.add(scrollPane);
// 窗口
setVisible(true);
setBounds(100,100,200,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JScrollPaneTest();
}
}
图标按钮:把一个图标变为一个按钮图标
package com.demo.panel;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
/**
* 设置一个图标按钮 加了一个按钮提示方法
* 将一个图片变为图标
*/
public class JButtonIconTest extends JFrame {
public JButtonIconTest() throws HeadlessException {
Container container = getContentPane();
//将一个图片变成图标
URL url = JButtonIconTest.class.getResource("one.jpg");
ImageIcon imageIcon = new ImageIcon(url);
//把这个图标放在按钮上
JButton button = new JButton();
button.setIcon(imageIcon);
//设置提示按钮,鼠标放到按钮上面会弹出一些提示
button.setToolTipText("图片按钮");
container.add(button);
setSize(500,300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JButtonIconTest();
}
}
单选按钮
package com.demo.panel;
import javax.swing.*;
import java.awt.*;
public class JButtonOneTest extends JFrame {
public void init(){
Container container = getContentPane();
//单选框
JRadioButton radioButton1 = new JRadioButton("JRdioButton1");
JRadioButton radioButton2 = new JRadioButton("JRdioButton2");
JRadioButton radioButton3 = new JRadioButton("JRdioButton3");
//由于是单选框,需要准备一个组,让三个按钮在这组内实现单选功能
ButtonGroup group = new ButtonGroup();
group.add(radioButton1);
group.add(radioButton2);
group.add(radioButton3);
//将按钮添加进来,不是将组添加进来!! 要设置按钮的位置,避免出现覆盖现象
container.add(radioButton1,BorderLayout.NORTH);
container.add(radioButton2,BorderLayout.CENTER);
container.add(radioButton3,BorderLayout.SOUTH);
setSize(500,300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JButtonOneTest().init();
}
}
复选按钮
package com.demo.panel;
import javax.swing.*;
import java.awt.*;
public class JButtonTwoTest extends JFrame {
public void init(){
Container container = getContentPane();
//多选框
JCheckBox checkBox1 = new JCheckBox("checkBox1");
JCheckBox checkBox2 = new JCheckBox("checkBox2");
JCheckBox checkBox3 = new JCheckBox("checkBox3");
container.add(checkBox1,BorderLayout.NORTH);
container.add(checkBox2,BorderLayout.CENTER);
container.add(checkBox3,BorderLayout.SOUTH);
setSize(500,300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JButtonTwoTest().init();
}
}
下拉框
package com.demo.panel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* 下拉框 JComboBox类
* System.out.println(comboBox.getSelectedIndex());//返回当前项的位置
* System.out.println(comboBox.getSelectedItem());//返回当前项的内容
*/
public class ComboboxTest extends JFrame {
public ComboboxTest() {
Container container = this.getContentPane();
// 下拉框
JComboBox comboBox = new JComboBox();
comboBox.addItem("正在热映");
comboBox.addItem(null);
comboBox.addItem("即将上映");
comboBox.addItem("下架");
container.add(comboBox,BorderLayout.NORTH);
// 监听
comboBox.addActionListener(new MyActionListener());
this.setVisible(true);
this.setBounds(100,100,400,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new ComboboxTest();
}
}
// 监听
class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
JComboBox comboBox = (JComboBox)e.getSource();
//返回当前项的位置
System.out.println(comboBox.getSelectedIndex());
//返回当前项的内容
System.out.println(comboBox.getSelectedItem());
}
}
列表框
package com.demo.panel;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Vector;
/**
* 列表框 JList
* 每一项都是可点击的
*/
public class ComboboxDemoTest extends JFrame {
public ComboboxDemoTest() {
// 列表的内容
// 动态变量 动态集合
Vector vector = new Vector();
vector.add("正在热映");
//与下拉框不同,动态集合自动排除掉为空的内容,所以这里显示的就两个项
vector.add(null);
vector.add("已下架");
// 列表中需要放入内容
JList list = new JList(vector);
Container container = this.getContentPane();
container.add(list);
this.setVisible(true);
this.setBounds(100,100,400,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new ComboboxDemoTest();
}
}
应用场景
文本框
package com.demo.panel;
import javax.swing.*;
import java.awt.*;
/**
* 文本框 JTextField
* 不能换行
*/
public class JTextFieldTest extends JFrame {
public JTextFieldTest() throws HeadlessException {
// 设置文本框 不能换行
// 设置初始内容
JTextField textField1 = new JTextField("hello");
// 设置初始内容与起始字符数,行列可变化
JTextField textField2 = new JTextField("world",20);
Container container = this.getContentPane();
container.add(textField1,BorderLayout.NORTH);
container.add(textField2,BorderLayout.SOUTH);
setVisible(true);
setBounds(100,100,200,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JTextFieldTest();
}
}
密码框
package com.demo.panel;
import javax.swing.*;
import java.awt.*;
/**
* 密码框 JPasswordField 在文本框中用一个字符隐藏内容
* 是JTextField的子类 默认是一个小黑点隐藏
*/
public class JPasswordFieldTest extends JFrame {
public JPasswordFieldTest() throws HeadlessException {
// 设置文本框 不能换行
// 设置初始内容
JPasswordField passwordField = new JPasswordField("hello");
// 设置用一个字符代替输入字符,实现隐藏作用
passwordField.setEchoChar('*');
// 得到文本框的内容
System.out.println(passwordField.getPassword());
Container container = this.getContentPane();
container.add(passwordField,BorderLayout.NORTH);
setVisible(true);
setBounds(100,100,200,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JPasswordFieldTest();
}
}
文本域
package com.demo.panel;
import javax.swing.*;
import java.awt.*;
public class JTextAreaTest extends JFrame {
public JTextAreaTest() throws HeadlessException {
// 设置一个文本域 文本域可以换行,而文本框不行
// 设置起始行列数,行列可变化
JTextArea textArea = new JTextArea(20,30);
textArea.setText("滑动面板的文本域,有换行功能");
// JScrollPane面板
JScrollPane scrollPane = new JScrollPane(textArea);
Container container = this.getContentPane();
container.add(scrollPane);
setVisible(true);
setBounds(100,100,200,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JTextAreaTest();
}
}