程序框架
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| package myPackage;
import java.awt.*; import javax.swing.*;
class App extends JFrame { App() { super("我是窗口标题"); Container container = getContentPane();
setVisible(true); setSize(300, 200); setDefaultCloseOperation(EXIT_ON_CLOSE); } }
public class Test1 { public static void main(String[] args) { App app = new App(); } }
|
这个程序是整个JFrame
程序的框架。
关于布局和基础知识本文不过多赘述,本文只讲比较冷门的可能考点。
常见容器
1. Jlabel(标签)
2.JTextField(文本框)
3. JTexArea(文本区/文本域)
4. Jbutton(按钮)
5. JPanel(面板)
6. JCheckBox(选择框/复选框)
7. JRadioButton(单选按钮)
8. JComboBox(下拉列表)
9. JPasswordField(密码框)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| package myPackage;
import java.awt.*;
import javax.swing.*;
class App extends JFrame { App() { super("我是窗口标题"); Container container = getContentPane(); JMenuBar menu_bar = new JMenuBar(); JMenu menu = new JMenu("菜单大哥"); JMenu menu2 = new JMenu("菜单"); JMenuItem item = new JMenuItem("小骑士"); JMenuItem item2 = new JMenuItem("骑士"); setJMenuBar(menu_bar); menu_bar.add(menu); menu_bar.add(menu2); menu.add(item); menu.add(item2);
setVisible(true); setSize(300, 200); setDefaultCloseOperation(EXIT_ON_CLOSE); } }
public class Test1 { public static void main(String[] args) { App app = new App(); } }
|
程序效果:
相关概念:
标签(JLabel)
用Jlabel可以实现插入图片的效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| package myPackage;
import java.awt.*; import javax.swing.*;
class App extends JFrame { App() { super("我是窗口标题"); Container container = getContentPane(); container.add(new JLabel("Shy的专辑封面💽")); container.add(new JLabel(new ImageIcon("/Users/sy/Downloads/Shy/Shy.jpg")));
container.setLayout(new FlowLayout()); setVisible(true); pack(); setDefaultCloseOperation(EXIT_ON_CLOSE); } }
public class Test1 { public static void main(String[] args) { App app = new App(); } }
|
pack()
方法非常好用,可以根据内容自动调整窗口大小为合适的大小。
运行效果:
使用的事件接口
1
| public void addItemListener(ItemListener l)
|
常用方法
1 2
| public boolean isSelected(); clearSelection();
|
JRadioButton
常常成对出现,届时需要将他们添加到同一个按钮组ButtonGroup
中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| package myPackage;
import java.awt.*; import javax.swing.*;
class App extends JFrame { JRadioButton man = new JRadioButton("男"); JRadioButton woman = new JRadioButton("女"); ButtonGroup radios = new ButtonGroup(); App() { super("我是窗口标题"); Container container = getContentPane();
container.add(man); container.add(woman);
radios.add(man); radios.add(woman);
container.setLayout(new FlowLayout()); setVisible(true); setSize(300, 200); setDefaultCloseOperation(EXIT_ON_CLOSE); } }
public class Test1 { public static void main(String[] args) { App app = new App(); } }
|
事件处理
单选按钮(JRadioButton
)使用ActionEvent
和ItemEvent.ActionEvent
事件进行处理,与按钮基本一致。从本节的示例可以看到,当单选按钮的选择状态发生改变时,会触发ItemEvent
事件,负责监听的接口是ItemListener
,在事件发生时会调用itemStateChanged
方法进行处理。
只需要在使用的类中实现该接口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class App extends JFrame implements ItemListener { App() { JRadioButton man = new JRadioButton("男"); JRadioButton woman = new JRadioButton("女"); man.addItemListener(this); woman.addItemListener(this); } @Override public void itemStateChanged(ItemEvent e) { } }
|
两个注意点:
- 使用
addItemListener(this)
绑定接口 - 实现
ItemListener
接口 - 实现接口中的
itemStateChanged()
方法
具体例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| package myPackage;
import java.awt.*; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener;
import javax.swing.*;
class App extends JFrame implements ItemListener { JRadioButton man = new JRadioButton("男"); JRadioButton woman = new JRadioButton("女"); ButtonGroup radios = new ButtonGroup(); App() { super("我是窗口标题"); Container container = getContentPane();
container.add(man); container.add(woman);
radios.add(man); radios.add(woman);
man.addItemListener(this); woman.addItemListener(this);
container.setLayout(new FlowLayout()); setVisible(true); setSize(300, 200); setDefaultCloseOperation(EXIT_ON_CLOSE); } @Override public void itemStateChanged(ItemEvent e) { JRadioButton source = (JRadioButton)e.getSource(); System.out.println(source.getText() + "发生了改变!🚀"); } }
public class Test1 { public static void main(String[] args) { App app = new App(); } }
|
运行效果
使用方法和JRadioButton
完全一致,使用同样的接口,同样可以使用按钮组进行添加。请自行将所有JRadioButton
中的JRadioButton
全部替换成JCheckBoxButton
,然后你会发现程序正常运行。
下拉菜单(JComboBox)
包含程序框架的完整代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| package myPackage;
import java.awt.*; import javax.swing.*;
class App extends JFrame { String[] str = {"空洞骑士", "丝之歌", "Minecraft"}; JComboBox combo = new JComboBox(str); App() { super("我是窗口标题"); Container container = getContentPane(); container.add(combo);
container.setLayout(new FlowLayout()); setVisible(true); setSize(300, 200); setDefaultCloseOperation(EXIT_ON_CLOSE); } }
public class Test1 { public static void main(String[] args) { App app = new App(); } }
|
构造方法
1 2
| String[] str = {"空洞骑士", "丝之歌", "Minecraft"}; JComboBox combo = new JComboBox(str);
|
常用方法
1 2 3
| public void addItemListener(ItemListener l); public Object getSelectedItem(); public int getSelectedIndex();
|
实际使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| package myPackage;
import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener;
import javax.swing.*;
class App extends JFrame implements ItemListener { String[] str = {"空洞骑士", "丝之歌", "Minecraft"}; JComboBox combo = new JComboBox(str); App() { super("我是窗口标题"); Container container = getContentPane(); container.add(combo);
combo.addItemListener(this);
container.setLayout(new FlowLayout()); setVisible(true); setSize(300, 200); setDefaultCloseOperation(EXIT_ON_CLOSE); } @Override public void itemStateChanged(ItemEvent e) { JComboBox source = (JComboBox)e.getSource(); System.out.println(source.getSelectedIndex()+":"+source.getSelectedItem().toString()); } }
public class Test1 { public static void main(String[] args) { App app = new App(); } }
|
运行效果:
文本输入框(JTextField)
实际使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| package myPackage;
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener;
import javax.swing.*;
class App extends JFrame implements ActionListener { JTextField txt = new JTextField("请输入文字", 20); App() { super("我是窗口标题"); Container container = getContentPane();
container.add(txt);
txt.addActionListener(this);
container.setLayout(new FlowLayout()); setVisible(true); setSize(300, 200); setDefaultCloseOperation(EXIT_ON_CLOSE); } @Override public void actionPerformed(ActionEvent e) { JTextField txt = (JTextField)e.getSource(); System.out.println(txt.getText()); } }
public class Test1 { public static void main(String[] args) { App app = new App(); } }
|
常用方法
1 2 3
| getText(); setText(); actionPerformed();
|
运行效果
![截屏2024-12-31 12.07.37](../../../Desktop/截屏2024-12-31 12.07.37.png)
数字和字符串互相转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| package myPackage;
public class Test2 { public static void main(String[] args) { Integer a = 3; Double b = 300.0;
System.out.println("字符串a:" + a.toString()); System.out.println("字符串b:" + b.toString());
Integer a2 = Integer.parseInt("301"); Double b2 = Double.parseDouble("301.0"); System.out.println(a2); System.out.println(b2); } }
|
运行结果
使用的方法
1 2 3 4 5 6 7
| Double.parseDouble(String st); Integer.parseInteger(String st);
Double x = 3.0; x.toString();
|