一、第一个Frame窗口程序

setVisible
setSize
setBackground
setLocation
setResizable

  1. package com.ctguyxr.gui.test1;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.WindowEvent;
  5. import java.awt.event.WindowListener;
  6. /**
  7. * Created By Intellij IDEA
  8. *
  9. * @author Xinrui Yu
  10. * @date 2021/12/15 8:22 星期三
  11. */
  12. public class MyFrame extends JFrame {
  13. public static void main(String[] args) {
  14. // title 就是窗口的标题文字
  15. Frame frame = new Frame("第一个Java图形界面的窗口");
  16. // setVisible 默认的窗口是加载在内存中,不可见的,设置为true就可见了
  17. frame.setVisible(true);
  18. // 设置窗口的默认大小
  19. frame.setSize(400,400);
  20. // 设置窗口的背景颜色
  21. frame.setBackground(new Color(255,0,0));
  22. // 设置窗口默认显示在屏幕上的位置
  23. frame.setLocation(300,300);
  24. // 设置窗口大小是否可以改变,默认为true
  25. frame.setResizable(false);
  26. }
  27. }

二、panel面板

  1. Java GUI编程里面,除了Frame窗口以外,还有Panel面板,面板有点类似于HTML中的Div标签
  2. 面板无法单独显现,只能放在Frame窗口中来显现 ```java package com.ctguyxr.gui.test1;

import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent;

/**

  • Created By Intellij IDEA *
  • @author Xinrui Yu
  • @date 2021/12/15 8:42 星期三 */ public class PanelTest { public static void main(String[] args) {

    1. Frame frame = new Frame("你好");
    2. Panel panel = new Panel();
    3. frame.setLayout(null);
    4. frame.setBounds(100,100,500,500);
    5. frame.setBackground(new Color(40,161,35));
    6. panel.setBounds(50,50,400,400);
    7. panel.setBackground(new Color(193,15,60));
    8. frame.add(panel);
    9. frame.setVisible(true);
    10. frame.addWindowListener(new WindowAdapter() {
    11. @Override
    12. public void windowClosing(WindowEvent e) {
    13. System.exit(0);
    14. }
    15. });

    } }

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21436600/1639529570871-9e2fc23f-d46d-4f95-867f-2eb55c3ce25a.png#clientId=ub02c8026-5dd5-4&from=paste&height=492&id=u08b93174&originHeight=492&originWidth=484&originalType=binary&ratio=1&size=12874&status=done&style=none&taskId=ud31f2209-a98d-4cae-a0b7-d4eef894475&width=484)
  2. <a name="lFKhG"></a>
  3. ## 设置窗口关闭的监听事件
  4. 涉及到的方法是:`frame.addWindowListener()`<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/21436600/1639529653335-feb9a8a6-1b23-4fb4-b29b-204ccef210a7.png#clientId=ub02c8026-5dd5-4&from=paste&height=255&id=u3d0afb46&originHeight=255&originWidth=986&originalType=binary&ratio=1&size=232544&status=done&style=none&taskId=u14b99454-1400-4a7f-aaa2-4875149fae7&width=986)
  5. 需要传入窗体监听器对象,然而发现这个`WindowListener`实际上是接口<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/21436600/1639529700546-acca6548-8261-4b9d-af0a-36d66f512f9e.png#clientId=ub02c8026-5dd5-4&from=paste&height=197&id=u3c9319ca&originHeight=197&originWidth=844&originalType=binary&ratio=1&size=43765&status=done&style=none&taskId=u1c55410b-38f2-400e-9134-c8662a12ca6&width=844)
  6. 如果直接创建接口的匿名子类的匿名对象的话,需要重写接口中的所有方法<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/21436600/1639529799363-433ba26c-711d-411b-94af-f9229111b6ca.png#clientId=ub02c8026-5dd5-4&from=paste&height=455&id=ub3a2aa0a&originHeight=455&originWidth=498&originalType=binary&ratio=1&size=307036&status=done&style=none&taskId=u41fa650a-7e85-4734-9595-3acfbddc313&width=498)<br />但是我们只需要重写窗口关闭的方法,显然这种方法是不合理的<br />进一步查找发现,`WindowAdapter`类实现了`WindowListener`,并且所有方法提供了一个空实现,这其实就是设计模式中的缺省设计模式<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/21436600/1639530041458-b192c7bd-a29e-4024-a4dd-fc4a8385a8ff.png#clientId=ub02c8026-5dd5-4&from=paste&height=688&id=ub3e27efd&originHeight=688&originWidth=918&originalType=binary&ratio=1&size=579964&status=done&style=none&taskId=ud609bfaf-7723-460a-b482-0b1285628d3&width=918)
  7. [设计模式 | 适配器模式及典型应用 - 掘金](https://juejin.cn/post/6844903682136342541)
  8. > 缺省适配器模式(Default Adapter Pattern):当不需要实现一个接口所提供的所有方法时,可先设计一个抽象类实现该接口,并为接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可以选择性地覆盖父类的某些方法来实现需求,它适用于不想使用一个接口中的所有方法的情况,又称为单接口适配器模式。缺省适配器模式是适配器模式的一种变体,其应用也较为广泛。在JDK类库的事件处理包java.awt.event中广泛使用了缺省适配器模式,如WindowAdapterKeyAdapterMouseAdapter等。
  9. 现在只需要创建`WindowAdapter`类的对象并重写监听窗口关闭的事件就可以了
  10. ```java
  11. frame.addWindowListener(new WindowAdapter() {
  12. @Override
  13. public void windowClosing(WindowEvent e) {
  14. System.exit(0);
  15. }
  16. });

三、布局管理器

1、流式布局 FlowLayout

主要是通过FloLayout的常量属性来设置布局方式

LEFT:0 CENTER:1 RIGHT:2

image.png

  1. package com.ctguyxr.gui.test1;
  2. import java.awt.*;
  3. /**
  4. * Created By Intellij IDEA
  5. *
  6. * @author Xinrui Yu
  7. * @date 2021/12/15 9:04 星期三
  8. */
  9. public class FlowLayoutTest {
  10. public static void main(String[] args) {
  11. Frame frame = new Frame("hello");
  12. Button button1 = new Button("button1");
  13. Button button2 = new Button("button2");
  14. Button button3 = new Button("button3");
  15. frame.setLayout(new FlowLayout(FlowLayout.LEFT));
  16. frame.setBounds(300,300,500,500);
  17. frame.add(button1);
  18. frame.add(button2);
  19. frame.add(button3);
  20. frame.setVisible(true);
  21. }
  22. }

image.png
image.png

2、边界布局 BorderLayout

image.png

  1. package com.ctguyxr.gui.test1;
  2. import java.awt.*;
  3. /**
  4. * Created By Intellij IDEA
  5. *
  6. * @author Xinrui Yu
  7. * @date 2021/12/15 9:11 星期三
  8. */
  9. public class BorderLayoutTest {
  10. public static void main(String[] args) {
  11. Frame frame = new Frame("BorderLayoutTest");
  12. Button button1 = new Button("EAST");
  13. Button button2 = new Button("WEST");
  14. Button button3 = new Button("SOUTH");
  15. Button button4 = new Button("NORTH");
  16. Button button5 = new Button("CENTER");
  17. frame.add(button1,BorderLayout.EAST);
  18. frame.add(button2,BorderLayout.WEST);
  19. frame.add(button3,BorderLayout.SOUTH);
  20. frame.add(button4,BorderLayout.NORTH);
  21. frame.add(button5,BorderLayout.CENTER);
  22. frame.setBounds(300,300,500,500);
  23. frame.setVisible(true);
  24. }
  25. }

3、网格布局 GridLayout

有点类似于CSS中的Grid布局方式,将窗口分成一个一个的Grid进行布局
GridLayout一共有三种构造函数
可以指定有多少行、多少列、行间距是多少和列间距是多少

参数列表 rows 行数 cols 列数 hgap 行间距 vgap 列间距

  1. package com.ctguyxr.gui.test1;
  2. import java.awt.*;
  3. /**
  4. * Created By Intellij IDEA
  5. *
  6. * @author Xinrui Yu
  7. * @date 2021/12/15 9:19 星期三
  8. */
  9. public class GridLayoutTest {
  10. public static void main(String[] args) {
  11. Frame frame = new Frame("grid");
  12. // 将窗口分成3行2列进行布局
  13. frame.setLayout(new GridLayout(3,2));
  14. Button button1 = new Button("1");
  15. Button button2 = new Button("2");
  16. Button button3 = new Button("3");
  17. Button button4 = new Button("4");
  18. Button button5 = new Button("5");
  19. Button button6 = new Button("6");
  20. frame.add(button1);
  21. frame.add(button2);
  22. frame.add(button3);
  23. frame.add(button4);
  24. frame.add(button5);
  25. frame.add(button6);
  26. frame.setSize(500,500);
  27. frame.setVisible(true);
  28. }
  29. }

最后的效果图
image.png

四、按钮

Java中提供了Button类,来实现窗口程序中的按钮功能
常用的属性

label 按钮上显现的名字 actionCommand 执行的操作名称 actionListener 时间监听器

常用的两个构造器

空参构造器:按钮上不显示文字内容 有参构造器:指定按钮上显示出来的文字内容

按钮的事件监听器

一般按钮都是有特定功能的组件,比如关闭窗口,提交表单的等等
Java中进行操作首先就需要给按钮添加上事件的监听器
然后对应的进行处理
调用的方法是button.addActionListener
但是发现需要传入的参数是一个接口
image.png
image.png

且接口里面只有一个方法,
不难想到可以编写一个类(或者直接创建这个接口匿名实现类的匿名对象)然后去实现这个接口,最后把这个类的对象作为参数传入,但是我们可以用Java8的Lambda表达式更好的解决这个问题

  1. button.addActionListener(e -> {
  2. System.out.println("点击");
  3. });

参数e 就是接口中actionPerformed方法的参数,我们通过e获取到被点击按钮上的一些信息
image.png

多个按钮共用一个事件监听器

五、输入框事件监听

文本框:TextField textField = new TextField()

1、文本框事件监听

我们可以监听文本框的输入事件,从而获取到用户在文本框中输入了什么内容
这里直接采取Lambda表达式的写法
e.getSource()EventObject类中的方法
可以获取到触发事件的对象类

  1. textField.addActionListener(e -> {
  2. Object source = e.getSource();
  3. if(source instanceof TextField){
  4. TextField f = (TextField) source;
  5. System.out.println(f.getText());
  6. f.setText("");
  7. }
  8. });

当我们在文本框中输入了数据之后,按下回车
通过事件监听器拿到输入的数据,并打印到控制台之上
image.png

2、输入密码

有时候我们在表单中需要输入密码,这个时候我们对显示出来的文字进行使用*代替
textField.setEchoChar_(_'*'_)_;
image.png
对外显示的虽然是*号,但是我们可以在程序中拿到真实输入的数据
image.png

六、画笔

1、使用画笔

主要使用到的方法是Window类中的paint()方法
image.png

通过重写paint()方法,然后使用Graphics类的对象进行绘画

  1. package com.ctguyxr.gui.test5;
  2. import com.ctguyxr.gui.util.CloseWindowFrame;
  3. import java.awt.*;
  4. /**
  5. * Created By Intellij IDEA
  6. *
  7. * @author Xinrui Yu
  8. * @date 2021/12/16 13:46 星期四
  9. */
  10. public class Paint extends Frame {
  11. public Paint() {
  12. setBounds(200,200,600,500);
  13. setVisible(true);
  14. CloseWindowFrame.closeWindowFrame(this);
  15. }
  16. @Override
  17. public void paint(Graphics g) {
  18. g.setColor(Color.RED);
  19. g.drawOval(100,100,100,100);
  20. g.fillOval(100,100,100,100);
  21. g.setColor(Color.GREEN);
  22. g.fillRect(200,200,100,100);
  23. }
  24. }

image.png

2、鼠标监听

使用适配器模式创建鼠标监听的对象,并重写里面的点击方法

  1. private class MyMouseAdapter extends MouseAdapter{
  2. @Override
  3. public void mouseClicked(MouseEvent e) {
  4. Paint frame = (Paint) e.getSource();
  5. list.add(new Point(e.getX(),e.getY()));
  6. frame.repaint();
  7. }
  8. }

使用画笔绘画,实际是一次性的操作,如果我们想要在鼠标点击的位置再画一个图形,就需要调用repaint()方法来重新绘画一次

  1. package com.ctguyxr.gui.test5;
  2. import com.ctguyxr.gui.util.CloseWindowFrame;
  3. import java.awt.*;
  4. import java.awt.event.MouseAdapter;
  5. import java.awt.event.MouseEvent;
  6. import java.util.ArrayList;
  7. import java.util.Iterator;
  8. /**
  9. * Created By Intellij IDEA
  10. *
  11. * @author Xinrui Yu
  12. * @date 2021/12/16 13:46 星期四
  13. */
  14. public class Painter extends Frame {
  15. private ArrayList<Point> list;
  16. public Painter() {
  17. list = new ArrayList<>();
  18. setBounds(200,200,600,500);
  19. setVisible(true);
  20. CloseWindowFrame.closeWindowFrame(this);
  21. }
  22. @Override
  23. public void paint(Graphics g) {
  24. MyMouseAdapter adapter = new MyMouseAdapter();
  25. this.addMouseListener(adapter);
  26. Iterator<Point> iterator = list.iterator();
  27. while(iterator.hasNext()){
  28. Point po = iterator.next();
  29. g.setColor(Color.BLUE);
  30. g.fillOval(po.x,po.y,10,10);
  31. }
  32. }
  33. private class MyMouseAdapter extends MouseAdapter{
  34. @Override
  35. public void mouseClicked(MouseEvent e) {
  36. Painter frame = (Painter) e.getSource();
  37. list.add(new Point(e.getX(),e.getY()));
  38. frame.repaint();
  39. }
  40. }
  41. }

七、键盘监听

Java窗体还提供了键盘监听事件来监听我们的键盘输入
KeyListener 是接口,其同样采用的是适配器模式
KeyAdapter 就是其适配器类
image.png

我们可以通过事件来获得键盘输入字符的code,然后与内置的code常量相比较,从而判断用户按下的是哪一个键
image.png
image.png

八、Swing

1、窗口和面板

Swing包下的JFrame是对Java原有的Frame窗口的补充,包装了一些常用的操作,添加了更多的组件
image.png

比如已经封装好了窗口的关闭事件
frame.setDefaultCloseOperation_(_WindowConstants._EXIT_ON_CLOSE)_;

  1. package com.ctguyxr.gui.test7;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. /**
  5. * Created By Intellij IDEA
  6. *
  7. * @author Xinrui Yu
  8. * @date 2021/12/16 14:58 星期四
  9. */
  10. public class MyJFrameTest {
  11. public void init(){
  12. JFrame frame = new JFrame("JFrame test");
  13. frame.setVisible(true);
  14. frame.setBounds(300,300,300,300);
  15. JLabel label = new JLabel("这是一个文本标签");
  16. label.setHorizontalAlignment(SwingConstants.CENTER);
  17. frame.getContentPane().setBackground(Color.PINK);
  18. frame.add(label);
  19. frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  20. }
  21. public static void main(String[] args) {
  22. new MyJFrameTest().init();
  23. }
  24. }

2、弹窗

  1. package com.ctguyxr.gui.test8;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. /**
  5. * Created By Intellij IDEA
  6. *
  7. * @author Xinrui Yu
  8. * @date 2021/12/16 15:21 星期四
  9. */
  10. public class DialogTest {
  11. public DialogTest() {
  12. JFrame jFrame = new JFrame();
  13. jFrame.setVisible(true);
  14. jFrame.setBounds(300,300,300,300);
  15. JButton button = new JButton("点我");
  16. button.setSize(100,100);
  17. button.addActionListener(e -> {
  18. JDialog jDialog = new JDialog();
  19. jDialog.setVisible(true);
  20. jDialog.setBounds(100,100,300,300);
  21. Container container = jDialog.getContentPane();
  22. container.setLayout(null);
  23. container.add(new JLabel("Hello,World"));
  24. });
  25. jFrame.getContentPane().add(button);
  26. jFrame.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));
  27. jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  28. }
  29. public static void main(String[] args) {
  30. new DialogTest();
  31. }
  32. }

3、Icon和ImageIcon

使用画笔画图标

  1. package com.ctguyxr.gui.test8;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. /**
  5. * Created By Intellij IDEA
  6. *
  7. * @author Xinrui Yu
  8. * @date 2021/12/16 15:40 星期四
  9. */
  10. public class IconTest extends JFrame implements Icon {
  11. private int width;
  12. private int height;
  13. public IconTest() throws HeadlessException {
  14. }
  15. public IconTest(int width, int height) throws HeadlessException {
  16. this.width = width;
  17. this.height = height;
  18. }
  19. @Override
  20. public void paintIcon(Component c, Graphics g, int x, int y) {
  21. g.fillOval(x,y,width,height);
  22. }
  23. @Override
  24. public int getIconWidth() {
  25. return width;
  26. }
  27. @Override
  28. public int getIconHeight() {
  29. return height;
  30. }
  31. public void init(){
  32. IconTest iconTest = new IconTest(15, 15);
  33. JLabel label = new JLabel("测试", iconTest, SwingConstants.CENTER);
  34. Container container = getContentPane();
  35. container.add(label);
  36. setVisible(true);
  37. setBounds(300,300,300,300);
  38. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  39. }
  40. public static void main(String[] args) {
  41. new IconTest().init();
  42. }
  43. }

直接使用图片当作图标

  1. package com.ctguyxr.gui.test8;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.net.URL;
  5. /**
  6. * Created By Intellij IDEA
  7. *
  8. * @author Xinrui Yu
  9. * @date 2021/12/16 15:46 星期四
  10. */
  11. public class ImageIconTest extends JFrame {
  12. public ImageIconTest() throws HeadlessException {
  13. URL resource = getClass().getResource("img.png");
  14. assert resource != null;
  15. ImageIcon imageIcon = new ImageIcon(resource);
  16. JLabel label = new JLabel("ImageIcon", imageIcon, SwingConstants.CENTER);
  17. Container container = getContentPane();
  18. container.add(label);
  19. setVisible(true);
  20. setBounds(300,300,600,500);
  21. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  22. }
  23. public static void main(String[] args) {
  24. new ImageIconTest();
  25. }
  26. }

4、面板 JPanel

可滚动面板JScrollPane

当页面内容超出窗口的大小的时候,就会出现水平或者垂直的滚动条

  1. package com.ctguyxr.gui.test8;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. /**
  5. * Created By Intellij IDEA
  6. *
  7. * @author Xinrui Yu
  8. * @date 2021/12/16 15:57 星期四
  9. */
  10. public class JScrollTest extends JFrame {
  11. public JScrollTest() throws HeadlessException {
  12. Container container = this.getContentPane();
  13. JTextArea textArea = new JTextArea(20, 50);
  14. JScrollPane scrollPane = new JScrollPane(textArea);
  15. container.add(scrollPane);
  16. this.setVisible(true);
  17. this.setBounds(300,300,200,200);
  18. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  19. }
  20. public static void main(String[] args) {
  21. new JScrollTest();
  22. }
  23. }

image.png

5、图片按钮、单选框、复选框

5.1 图片按钮

  1. package com.ctguyxr.gui.test8;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.net.URL;
  5. /**
  6. * Created By Intellij IDEA
  7. *
  8. * @author Xinrui Yu
  9. * @date 2021/12/16 16:04 星期四
  10. */
  11. public class RadioButtonTest extends JFrame {
  12. public RadioButtonTest() throws HeadlessException {
  13. Container container = getContentPane();
  14. URL resource = getClass().getResource("img.png");
  15. assert resource != null;
  16. ImageIcon imageIcon = new ImageIcon(resource);
  17. JButton button = new JButton(imageIcon);
  18. // 设置鼠标悬浮提示文字
  19. button.setToolTipText("图片按钮");
  20. container.add(button);
  21. setBounds(100,100,600,600);
  22. setVisible(true);
  23. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  24. }
  25. public static void main(String[] args) {
  26. new RadioButtonTest();
  27. }
  28. }

image.png

5.2 单选框

一个使用了单选框的字段,应该只能选择多个单选框中的一个
这就需要我们用到的方法,将多个单选框分成一组
这一组中只能有一个单选框处于被选择状态
不可以同时选择多个

  1. package com.ctguyxr.gui.test8;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.net.URL;
  5. /**
  6. * Created By Intellij IDEA
  7. *
  8. * @author Xinrui Yu
  9. * @date 2021/12/16 16:04 星期四
  10. */
  11. public class RadioButtonTest extends JFrame {
  12. public RadioButtonTest() throws HeadlessException {
  13. Container container = getContentPane();
  14. JRadioButton button1 = new JRadioButton("button1");
  15. JRadioButton button2 = new JRadioButton("button2");
  16. JRadioButton button3 = new JRadioButton("button3");
  17. ButtonGroup group = new ButtonGroup();
  18. group.add(button1);
  19. group.add(button2);
  20. group.add(button3);
  21. container.add(button1,BorderLayout.NORTH);
  22. container.add(button2,BorderLayout.CENTER);
  23. container.add(button3,BorderLayout.SOUTH);
  24. setVisible(true);
  25. setBounds(100,100,500,200);
  26. }
  27. public static void main(String[] args) {
  28. new RadioButtonTest();
  29. }
  30. }

image.png

5.3 复选框

多选框是可以重复选择的按钮

  1. package com.ctguyxr.gui.test8;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.net.URL;
  5. /**
  6. * Created By Intellij IDEA
  7. *
  8. * @author Xinrui Yu
  9. * @date 2021/12/16 16:04 星期四
  10. */
  11. public class RadioButtonTest extends JFrame {
  12. public RadioButtonTest() throws HeadlessException {
  13. Container container = getContentPane();
  14. JCheckBox button1 = new JCheckBox("button1");
  15. JCheckBox button2 = new JCheckBox("button2");
  16. JCheckBox button3 = new JCheckBox("button3");
  17. button1.setSize(200,100);
  18. button2.setSize(200,100);
  19. button3.setSize(200,100);
  20. container.add(button1);
  21. container.add(button2);
  22. container.add(button3);
  23. container.setLayout(new FlowLayout(FlowLayout.CENTER));
  24. setVisible(true);
  25. setBounds(100,100,500,300);
  26. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  27. }
  28. public static void main(String[] args) {
  29. new RadioButtonTest();
  30. }
  31. }

image.png

6、列表

6.1 下拉框

  1. package com.ctguyxr.gui.test8;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.util.List;
  5. /**
  6. * Created By Intellij IDEA
  7. *
  8. * @author Xinrui Yu
  9. * @date 2021/12/16 16:20 星期四
  10. */
  11. public class ListBoxTest extends JFrame {
  12. public ListBoxTest() throws HeadlessException {
  13. Container container = getContentPane();
  14. JComboBox<String> comboBox = new JComboBox<>();
  15. comboBox.addItem("火锅");
  16. comboBox.addItem("烧烤");
  17. comboBox.addItem("炸鸡");
  18. container.add(comboBox);
  19. setVisible(true);
  20. setBounds(300,300,500,100);
  21. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  22. }
  23. public static void main(String[] args) {
  24. new ListBoxTest();
  25. }
  26. }

image.png

6.2 列表框

  1. package com.ctguyxr.gui.test8;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.util.List;
  5. /**
  6. * Created By Intellij IDEA
  7. *
  8. * @author Xinrui Yu
  9. * @date 2021/12/16 16:20 星期四
  10. */
  11. public class ListBoxTest extends JFrame {
  12. public ListBoxTest() throws HeadlessException {
  13. Container container = getContentPane();
  14. String[] data = new String[]{"炸鸡","火锅","烧烤"};
  15. JList<String> jList = new JList<>(data);
  16. container.add(jList);
  17. setVisible(true);
  18. setBounds(300,300,500,300);
  19. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  20. }
  21. public static void main(String[] args) {
  22. new ListBoxTest();
  23. }
  24. }

image.png

7、文本框、密码框和文本域