目录
GUI编程
组件
-
窗口
-
弹窗
-
面板
-
按钮
-
图片
-
文本框
-
列表框
-
监听事件
-
鼠标事件
-
键盘事件
-
破解工具
1、简介
GUI的核心技术:Swing AWT
为什么我们需要学习?
-
可以写出自己心中想要的一些小工具
-
工作时候。也可能需要维护到Swing界面(小概率)
-
了解MVC架构,了解监听!
2、AWT
2.1、AWT介绍
AWT:abstract window tool
-
包含很多类的接口!GUI(图形用户界面)
-
元素:窗口、按钮、文本框等
-
java.awt中可查看内含文件
2.2、组件和容器
1、frame
package com.gui.lesson01; import java.awt.*; //gui的第一个界面 public class TestFrame { public static void main(String[] args) { //Frame Frame frame = new Frame("我的第一个Java图形界面窗口"); //设置可见性 frame.setVisible(true); //设置窗口大小 frame.setSize(400,400); //设置背景颜色 Color frame.setBackground(new Color(196, 120, 120)); //弹出的初始位置 frame.setLocation(200,200); //设置大小固定 frame.setResizable(false); } }
问题:发现窗口关闭不掉,停止Java程序运行~
对上述方法封装!
package com.gui.lesson01; import java.awt.*; public class TestFrame02 { public static void main(String[] args) { //展示多个窗口 MyFrame myframe1 = new MyFrame(100,100,200,200,Color.blue); MyFrame myframe2 = new MyFrame(300,100,200,200,Color.yellow); MyFrame myframe3 = new MyFrame(100,300,200,200,Color.red); MyFrame myframe4 = new MyFrame(300,300,200,200,Color.MAGENTA); } } 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); setBounds(x,y,w,h); setBackground(color); } }
2、panel
解决了关闭事件!
package com.gui.lesson01; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; //Panel可以看成是一个空间,但是不能单独存在 public class TestPanel { public static void main(String[] args) { Frame frame = new Frame(); //布局的概念 Panel panel = new Panel(); //设置布局 frame.setLayout(null); //坐标 frame.setBounds(300,300,500,500); frame.setBackground(new Color(124, 156, 49)); //panel设置坐标,相对于frame panel.setBounds(50,50,400,400); panel.setBackground(new Color(239, 65, 65)); //frame.add(panel) frame.add(panel); frame.setVisible(true); //监听事件,监听串口关闭事件 System.exit(0); //适配器模式 frame.addWindowListener(new WindowAdapter() { //窗口点击关闭的时候需要做的事 @Override public void windowClosing(WindowEvent e) { //结束程序 System.exit(0); } }); } }
panel在frame上,frame上装饰panel~
2.3、布局管理
-
流式布局
package com.gui.lesson01; import java.awt.*; public class TestFlowLayout { public static void main(String[] args) { Frame frame = new Frame(); //组件-按钮 Button button1 = new Button("button1"); Button button2 = new Button("button2"); Button button3 = new Button("button3"); //frame.setLayout(new FlowLayout()); frame.setLayout(new FlowLayout(FlowLayout.LEFT)); frame.setSize(200,200); //将按钮添加上去 frame.add(button1); frame.add(button2); frame.add(button3); frame.setVisible(true); } }
-
东西南北中
package com.gui.lesson01; import javax.swing.border.Border; import java.awt.*; public class TestBorderLayout { public static void main(String[] args) { Frame frame = new Frame("TestBorderLayout"); 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"); frame.add(east, BorderLayout.EAST); frame.add(west, BorderLayout.WEST); frame.add(south, BorderLayout.SOUTH); frame.add(north, BorderLayout.NORTH); frame.add(center, BorderLayout.CENTER); frame.setSize(200,200); frame.setVisible(true); } }
-
表格布局
package com.gui.lesson01; import java.awt.*; public class TestGridLayout { public static void main(String[] args) { Frame frame = new Frame("TestGridLayout"); Button btn1 = new Button("btn1"); Button btn2 = new Button("btn2"); Button btn3 = new Button("btn3"); Button btn4 = new Button("btn4"); Button btn5 = new Button("btn5"); Button btn6 = new Button("btn6"); frame.setLayout(new GridLayout(3,2)); frame.add(btn1); frame.add(btn2); frame.add(btn3); frame.add(btn4); frame.add(btn5); frame.add(btn6); frame.pack();//Java函数 frame.setVisible(true); } }
练习:
//实现代码 package com.gui.lesson01; import javax.swing.border.Border; import java.awt.*; //练习的Demo讲解 public class ExDemo { public static void main(String[] args) { //总Frame Frame frame = new Frame(); frame.setLayout(new GridLayout(2,1)); frame.setVisible(true); frame.setLocation(300,400); frame.setBackground(Color.BLACK); frame.setSize(400,300); //四个面板 Panel panel01 = new Panel(new BorderLayout()); Panel panel02 = new Panel(new GridLayout(2,1)); Panel panel03 = new Panel(new BorderLayout()); Panel panel04 = new Panel(new GridLayout(2,2)); //上面一部分 panel01.add(new Button("East-1"), BorderLayout.EAST); panel01.add(new Button("West-1"), BorderLayout.WEST); panel02.add(new Button("p2-btn-1")); panel02.add(new Button("p2-btn-2")); panel01.add(panel02,BorderLayout.CENTER); //下面一部分 panel03.add(new Button("East-2"), BorderLayout.EAST); panel03.add(new Button("West-2"), BorderLayout.WEST); //中间四个 for (int i = 0; i < 4; i++) { panel04.add(new Button("for-"+i)); } panel03.add(panel04,BorderLayout.CENTER); frame.add(panel01); frame.add(panel03); } }
总结:
1.Frame是一个顶级窗口。
2.Panel无法单独显示,必须添加到某个容器中。
3.布局管理器。
1. 流式 1. 东西南北中 1. 表格
4.大小,定位,背景颜色,可见性,监听!
2.4、事件监听
package com.gui.lesson01.lesson02; 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 TestAction { public static void main(String[] args) { //按下按钮后触发一些事件 Frame frame = new Frame(); Button button = new Button(); //因为addActionListener()需要一个ActionListener,所以我们需要构造一个ActionListener MyActionListener myActionListener = new MyActionListener(); button.addActionListener(myActionListener); frame.add(button,BorderLayout.CENTER); frame.pack(); windowClose(frame);//关闭窗口 frame.setVisible(true); } //关闭窗口的事件 private static void windowClose(Frame frame){ frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } } class MyActionListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { System.out.println("abc"); } }
每点击一次按钮就会在控制台打印“abc”
多个按钮,共享一个事件
package com.gui.lesson01.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestActionTwo { public static void main(String[] args) { //两个按钮,实现统一操作 //开始 停止 Frame frame = new Frame("开始-停止"); Button button01 = new Button("start"); Button button02 = new Button("stop"); //可以显示的定义触发会返回的命令,如果不显式定义,则会走默认的值 //可以多个按钮写一个监听类 button02.setActionCommand("button02-stop"); MyMonitor myMonitor = new MyMonitor(); button01.addActionListener(myMonitor); button02.addActionListener(myMonitor); frame.add(button01,BorderLayout.NORTH); frame.add(button02,BorderLayout.SOUTH); frame.pack(); frame.setVisible(true); } } class MyMonitor implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { //e.getActionCommand();//获得按钮信息 System.out.println("按钮被点击了:"+e.getActionCommand()); } }
2.5、输入框事件监听
package com.gui.lesson01.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestText01 { public static void main(String[] args) { //main方法中只放一个启动方法~ new MyFrame(); } } class MyFrame extends Frame { public MyFrame(){ TextField textField = new TextField(); add(textField); //监听这个文本框输入的文字 MyActionListener2 myActionListener2 = new MyActionListener2(); //按下enter就会触发输入框的事件 textField.addActionListener(myActionListener2); //设置替换编码 textField.setEchoChar('*'); setVisible(true); pack(); } } class MyActionListener2 implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { TextField field = (TextField) e.getSource();//获得一些资源,返回一个对象 System.out.println(field.getText());//获得输入框的文本 field.setText("");//null、"" } }
在输入框输入字符,字符显示为‘*’,在按下enter键的时候,输入的字符会显示在控制台,同时输入框清空~
2.6、简易计算器的编写
加数+加数=总数,输入两个加数后点击“=”号会得到结果,同时加数的输入框会清空~
原始方法:
package com.gui.lesson01.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; //简易计算器 public class TextCalc { public static void main(String[] args) { new Calculator(); } } //计算器类 class Calculator extends Frame{ public Calculator(){ //三个文本框 TextField num1 = new TextField(10);//字符数 TextField num2 = new TextField(10); TextField num3 = new TextField(20); //一个按钮 Button button = new Button("="); button.addActionListener(new MyCalculatorListener(num1,num2,num3)); //一个标签 Label label = new Label("+"); //布局 setLayout(new FlowLayout()); add(num1); add(label); add(num2); add(button); add(num3); pack(); setVisible(true); } } //监听器类 class MyCalculatorListener implements ActionListener{ //获取三个变量 private TextField num1,num2,num3; public MyCalculatorListener(TextField num1,TextField num2,TextField num3){ this.num1 = num1; this.num2 = num2; this.num3 = num3; } @Override public void actionPerformed(ActionEvent e) { //1.获得加数和被加数 int n1 = Integer.parseInt(num1.getText()); int n2 = Integer.parseInt(num2.getText()); //2.将这个值 + 法运算之后放到第三个狂 num3.setText(""+(n1+n2)); //3.清空前两个框 num1.setText(""); num2.setText(""); } }
类的组合写法:
package com.gui.lesson01.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; //简易计算器 public class TextCalc { public static void main(String[] args) { new Calculator(); } } //计算器类 class Calculator extends Frame{ TextField num1,num2,num3; public Calculator(){ //三个文本框 num1 = new TextField(10);//字符数 num2 = new TextField(10); num3 = new TextField(20); Button button = new Button("="); Label label = new Label("+"); button.addActionListener(new MyCalculatorListener(this)); //布局 setLayout(new FlowLayout()); add(num1); add(label); add(num2); add(button); add(num3); pack(); setVisible(true); } } //监听器类 class MyCalculatorListener implements ActionListener{ //获取计算器这个对象,在一个类中组合另外一个类 Calculator calculator = null; public MyCalculatorListener(Calculator calculator){ this.calculator = calculator; } @Override public void actionPerformed(ActionEvent e) { //1.获得加数和被加数 //2.将这个值 + 法运算之后放到第三个狂 //3.清空前两个框 int n1 = Integer.parseInt(calculator.num1.getText()); int n2 = Integer.parseInt(calculator.num2.getText()); calculator.num3.setText(""+(n1+n2)); calculator.num1.setText(""); calculator.num2.setText(""); } }
面向对象--内部类写法:
package com.gui.lesson01.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; //简易计算器 public class TextCalc { public static void main(String[] args) { new Calculator().loadFrame(); } } //计算器类 class Calculator extends Frame{ //属性 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("+"); button.addActionListener(new MyCalculatorListener()); //布局 setLayout(new FlowLayout()); add(num1); add(label); add(num2); add(button); add(num3); pack(); setVisible(true); } //监听器类 // 内部类最大的好处。就是可以畅通无阻的访问外部的属性和方法~ class MyCalculatorListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { //1.获得加数和被加数 //2.将这个值 + 法运算之后放到第三个狂 //3.清空前两个框 int n1 = Integer.parseInt(num1.getText()); int n2 = Integer.parseInt(num2.getText()); num3.setText(""+(n1+n2)); num1.setText(""); num2.setText(""); } } }
2.7、画笔
package com.gui.lesson01.lesson03; import java.awt.*; public class TestPaint { public static void main(String[] args) { new MyPaint().loadFrame(); } } class MyPaint extends Frame { public void loadFrame(){ setBounds(200,200,600,500); setVisible(true); } //画笔 @Override public void paint(Graphics g){ //画笔,需要有颜色,画笔可以画画 g.setColor(Color.red); g.drawOval(100,100,100,100); g.fillOval(100,100,100,100); g.setColor(Color.GREEN); g.fillRect(200,200,200,200); //养成习惯,画笔用完就将它还原为最初始的颜色~ } }
效果:
2.8、鼠标监听
目标:想实现鼠标画图
实现效果如下:每点击面板就会留下一个点
package com.gui.lesson01.lesson03; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Iterator; //鼠标监听事件 public class TestMouseListener { public static void main(String[] args) { new MyFrame("画图"); } } //自己的类 class MyFrame extends Frame{ //画画需要画笔,需要监听鼠标当前的位置,需要集合来存储这个点 ArrayList points; public MyFrame(String title){ super(title); setBounds(200,200,400,300); //存放鼠标点击的点 points = new ArrayList<>(); setVisible(true); //鼠标监听器,正对这个窗口 this.addMouseListener(new MyMouseLisener()); } @Override public void paint(Graphics g){ //画画,监听鼠标事件 Iterator iterator = points.iterator(); while(iterator.hasNext()){ Point point = (Point)iterator.next(); g.setColor(Color.blue); g.fillOval(point.x, point.y, 10,10); } } //添加一个点到界面上 public void addPaint(Point point){ points.add(point); } //适配器模式 private class MyMouseLisener extends MouseAdapter{ //鼠标放下/弹起/按住不放 @Override public void mousePressed(MouseEvent e) { MyFrame frame = (MyFrame)e.getSource(); //这个我们点击的时候,就会在界面上产生一个点 //这个点就是鼠标的点 frame.addPaint(new Point(e.getX(),e.getY())); //每次点击鼠标都重新画一遍 frame.repaint();//刷新 } } }
2.9、窗口监听
事件监听关闭窗口~
package com.gui.lesson01.lesson03; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class TestWindow { public static void main(String[] args) { new WindowFrame(); } } class WindowFrame extends Frame { public WindowFrame(){ setBackground(Color.blue); setBounds(100,100,200,200); setVisible(true); addWindowListener(new MyWindowListener()); } class MyWindowListener extends WindowAdapter{ @Override public void windowClosing(WindowEvent e) { setVisible(true);//隐藏窗口,通过按钮,隐藏当前窗口 System.exit(0);//正常退出 } } }
匿名内部类的方法进行窗口操作~
package com.gui.lesson01.lesson03; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class TestWindow { public static void main(String[] args) { new WindowFrame(); } } class WindowFrame extends Frame { public WindowFrame(){ setBackground(Color.blue); setBounds(100,100,200,200); setVisible(true); //addWindowListener(new MyWindowListener()); this.addWindowListener( //匿名内部类 new WindowAdapter() { //关闭窗口 @Override public void windowClosing(WindowEvent e) { System.out.println("windowClosing"); System.exit(0); } //激活窗口 @Override public void windowActivated(WindowEvent e) { WindowFrame source = (WindowFrame) e.getSource(); source.setTitle("被激活了~"); System.out.println("windowActivated"); } } ); } }
2.10、键盘监听
package com.gui.lesson01.lesson03; import javafx.animation.KeyFrame; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; //键 public class TestKeyListener { public static void main(String[] args) { new KeyFrame1(); } } class KeyFrame1 extends Frame{ public KeyFrame1(){ setVisible(true); setBounds(1,2,300,400); this.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode();//不需要寄了这些数值。直接使用静态属性 VX_XXX System.out.println(keyCode); if(keyCode == KeyEvent.VK_UP){ System.out.println("你按下了上键~"); } //根据按下不同操作,产生不同的结果 } }); } }
捕获键盘输入字符的编码,若按下了上键,额外输出”你按下了上键~“
3、Swing
3.1、窗口、面板
package com.gui.lesson01.lesson04; import com.sun.prism.paint.Color; import javax.swing.*; import java.awt.*; public class JFrameDemo { //init();初始化 public void init(){ //顶级窗口 JFrame jframe = new JFrame(); jframe.setVisible(true); jframe.setBounds(100,100,200,200); jframe.setBackground(java.awt.Color.BLUE); //设置文字JLabel JLabel jLabel = new JLabel("Frame进阶版"); jframe.add(jLabel); //关闭事件 jframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { //建立窗口 new JFrameDemo().init(); } }
标签居中:
package com.gui.lesson01.lesson04; import javax.swing.*; import java.awt.*; public class JFrameDemo02 { public static void main(String[] args) { new MyJframe2().init(); } } class MyJframe2 extends JFrame { public void init(){ this.setBounds(12,12,200,200); this.setVisible(true); JLabel jLabel = new JLabel("Frame进阶版"); this.add(jLabel); //让文本标签居中.设置水平居中 jLabel.setHorizontalAlignment(SwingConstants.CENTER); //获得一个容器 Container container = this.getContentPane(); container.setBackground(Color.blue); } }
3.2、弹窗
JDialog,用来被弹出,默认就有关闭事件~
package com.gui.lesson01.lesson04; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class DialogDemo extends JFrame { public DialogDemo(){ this.setVisible(true); this.setSize(700,500); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //JFrame 放东西 容器 Container container = this.getContentPane(); //绝对布局 container.setLayout(null); //按钮 JButton button = new JButton("点击弹出一个对话框"); button.setBounds(30,30,200,50); //点击这个按钮时,弹出一个弹窗~ button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //弹窗 new MyDialogDemo(); } }); container.add(button); } public static void main(String[] args) { new DialogDemo(); } } //弹出的窗口 class MyDialogDemo extends JDialog{ public MyDialogDemo() { this.setVisible(true); this.setBounds(100,100,500,500); //this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); Container container = this.getContentPane(); container.setLayout(null); container.add(new Label("DialogDemo测试~")); } }
3.3、标签
label
new JLabel("xxx");
图标ICON
package com.gui.lesson01.lesson04; import javax.swing.*; import java.awt.*; //图标需要实现类,Frame继承~ public class IconDemo extends JFrame implements Icon { private int width; private int height; public IconDemo(){}//无参构造 public IconDemo(int width,int height){ this.width = width; this.height = height; } public void init(){ IconDemo iconDemo = new IconDemo(15,15); //图标放在标签上,也可以放在按钮上~ JLabel jLabel = new JLabel("icontest",iconDemo,SwingConstants.CENTER); Container container = getContentPane(); container.add(jLabel); this.setVisible(true); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new IconDemo().init(); } @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; } }
效果:
图片ICON
package com.gui.lesson01.lesson04; import javax.swing.*; import java.awt.*; import java.net.URL; public class ImageIconDemo extends JFrame{ public ImageIconDemo(){ //获取图片地址 JLabel jLabel = new JLabel("ImageIconDemo"); URL url = ImageIconDemo.class.getResource("Zombatar_1.jpg");//图片地址 ImageIcon imageIcon = new ImageIcon(url); jLabel.setIcon(imageIcon); jLabel.setHorizontalAlignment(SwingConstants.CENTER); Container container = getContentPane(); container.add(jLabel); setVisible(true); setSize(100,100); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new ImageIconDemo(); } }
3.4、面板
Jpanel
package com.gui.lesson01.lesson05; import javax.swing.*; import java.awt.*; public class JPanelDemo extends JFrame { public JPanelDemo(){ 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")); panel2.add(new JButton("2")); panel2.add(new JButton("2")); panel3.add(new JButton("3")); panel3.add(new JButton("3")); 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(panel1); container.add(panel2); container.add(panel3); container.add(panel4); this.setVisible(true); this.setSize(500,500); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JPanelDemo(); } }
效果:
JScrollPanel
package com.gui.lesson01.lesson05; import javax.swing.*; import java.awt.*; public class JScrolllDemo extends JFrame { public JScrolllDemo() { Container container = this.getContentPane(); //文本域 JTextArea textArea = new JTextArea(20,20); textArea.setText("滚动条测试"); //Scroll面板 JScrollPane scrollPane = new JScrollPane(textArea); container.add(scrollPane); this.setVisible(true); this.setBounds(100,100,300,350); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JScrolllDemo(); } }
效果:
3.5、按钮
图片按钮
package com.gui.lesson01.lesson05; import javax.swing.*; import java.awt.*; import java.net.URL; public class JButtonDemo01 extends JFrame { public JButtonDemo01(){ Container container = this.getContentPane(); container.setLayout(new BorderLayout()); //将一个图片变为图标 URL resource = JButtonDemo01.class.getResource("Zombatar_1.jpg"); ImageIcon icon = new ImageIcon(resource); //把这个图标放在按钮上 JButton button = new JButton(); button.setIcon(icon); button.setToolTipText("图片按钮"); //add container.add(button); this.setVisible(true); this.setSize(500,300); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JButtonDemo01(); } }
单选框
package com.gui.lesson01.lesson05; import javax.swing.*; import java.awt.*; import java.net.URL; public class JButtonDemo02 extends JFrame { public JButtonDemo02(){ Container container = this.getContentPane(); //单选框 JRadioButton radioButton01 = new JRadioButton("JRadioButton01"); JRadioButton radioButton02 = new JRadioButton("JRadioButton02"); JRadioButton radioButton03 = new JRadioButton("JRadioButton03"); //由于单选框只能选择一个,需要进行分组~一个分组只能选择一个 ButtonGroup buttonGroup = new ButtonGroup(); buttonGroup.add(radioButton01); buttonGroup.add(radioButton02); buttonGroup.add(radioButton03); //add container.add(radioButton01,BorderLayout.CENTER); container.add(radioButton02,BorderLayout.NORTH); container.add(radioButton03,BorderLayout.SOUTH); this.setVisible(true); this.setSize(500,300); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JButtonDemo02(); } }
效果:
多选框
package com.gui.lesson01.lesson05; import javax.swing.*; import java.awt.*; import java.net.URL; public class JButtonDemo03 extends JFrame { public JButtonDemo03 (){ Container container = this.getContentPane(); //多选框 JCheckBox checkBox01 = new JCheckBox("checkBox01"); JCheckBox checkBox02 = new JCheckBox("checkBox02"); //add container.add(checkBox01,BorderLayout.NORTH); container.add(checkBox02,BorderLayout.SOUTH); this.setVisible(true); this.setSize(500,300); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JButtonDemo03(); } }
3.6、列表
-
下拉框
package com.gui.lesson01.lesson06; import javax.swing.*; import java.awt.*; public class TestComboboxDemo01 extends JFrame { public TestComboboxDemo01() { Container container = this.getContentPane(); JComboBox status = new JComboBox(); status.addItem(null); status.addItem("正在热映"); status.addItem("已下架"); status.addItem("即将下架"); container.add(status); this.setVisible(true); this.setSize(500,350); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new TestComboboxDemo01(); } }
-
列表框
package com.gui.lesson01.lesson06; import javax.swing.*; import java.awt.*; import java.util.Vector; public class TestComboboxDemo02 extends JFrame { public TestComboboxDemo02() { Container container = this.getContentPane(); //生成列表内容 //String[] contents = {"1","2","3"}; Vector content = new Vector(); //列表中需要放入内容 JList jList = new JList(content); content.add("张三"); content.add("李四"); content.add("王五"); container.add(jList); this.setVisible(true); this.setSize(500,350); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new TestComboboxDemo02(); } }
-
应用场景
-
选择地区,或者一些单个选项
-
列表,展示信息,一般是动态扩容~
-
3.7、文本框
-
文本框
package com.gui.lesson01.lesson06; import javax.swing.*; import java.awt.*; public class TestTextDemo01 extends JFrame { public TestTextDemo01(){ Container container = this.getContentPane(); JTextField textField = new JTextField("Hello~"); JTextField textField2 = new JTextField("world",20); container.add(textField,BorderLayout.NORTH); container.add(textField2,BorderLayout.SOUTH); this.setVisible(true); this.setSize(500,350); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new TestTextDemo01(); } }
-
密码框
package com.gui.lesson01.lesson06; import javax.swing.*; import java.awt.*; public class TestTextDemo02 extends JFrame { public TestTextDemo02(){ Container container = this.getContentPane(); JPasswordField passwordField = new JPasswordField(); passwordField.setEchoChar('*'); container.add(passwordField); this.setVisible(true); this.setSize(500,350); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new TestTextDemo02(); } }
-
文本域
package com.gui.lesson01.lesson05; import javax.swing.*; import java.awt.*; public class JScrolllDemo extends JFrame { public JScrolllDemo() { Container container = this.getContentPane(); //文本域 JTextArea textArea = new JTextArea(20,20); textArea.setText("滚动条测试"); //Scroll面板 JScrollPane scrollPane = new JScrollPane(textArea); container.add(scrollPane); this.setVisible(true); this.setBounds(100,100,300,350); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JScrolllDemo(); } }
####