功能概述
这个Java Swing实现的记事本程序提供了以下主要功能:
-
基本文本编辑功能:创建、编辑和保存文本内容
-
文件操作:新建、打开、保存、另存为文件
-
格式设置:调整字体大小、颜色、背景色
-
查看选项:缩放功能(放大、缩小、默认)
-
辅助功能:插入日期/时间、自动换行、状态栏
-
帮助系统:包含问题反馈和百度搜索功能
-
多窗口支持:可以同时打开多个记事本窗口
核心技术
-
Swing组件:
-
JFrame
作为主窗口 -
JTextArea
作为文本编辑区域 -
JScrollPane
实现滚动条 -
JMenuBar
和JMenu
实现菜单系统 -
JDialog
用于对话框窗口
-
-
事件处理:
-
使用
ActionListener
处理按钮和菜单项点击 -
使用
ItemListener
处理下拉选择框变化
-
-
文件操作:
-
使用
FileDialog
实现文件选择 -
使用
BufferedReader
/BufferedWriter
进行文件读写
-
-
其他技术:
-
JColorChooser
实现颜色选择 -
Desktop
类实现浏览器打开功能 -
JOptionPane
显示各种对话框
-
核心组件
-
文本编辑区:
JTextArea
是核心组件,所有文本编辑功能都围绕它实现 -
菜单系统:提供所有功能的入口,组织良好
-
对话框系统:包括文件对话框、颜色选择器等
-
辅助窗口:如问题反馈窗口、复制内容查看窗口等
对学习者的好处
-
Swing学习范例:
-
展示了完整的Swing应用程序结构
-
演示了各种Swing组件的使用方法
-
展示了组件布局和事件处理的实践
-
-
Java基础巩固:
-
文件I/O操作
-
事件处理机制
-
面向对象编程实践
-
-
项目结构学习:
-
展示了如何组织一个相对复杂的GUI应用程序
-
演示了功能模块的划分和组织
-
这个记事本程序是一个很好的Swing学习案例,涵盖了GUI编程的多个重要方面,对于初学者理解Java桌面应用开发非常有帮助。
看看效果:是不是有点想cmd命令框
这个是背景色设置功能,使用JColorChooser
实现颜色选择的
新建窗口功能:
分别是字体大小的调整和文字颜色的设置:
其余功能的截图我就不一样在这里分享,你们自己运行体验哈!!!
代码部分:因为代码是我在学习javaswing的时候自己写的,然后就是一些变量的名字随便起的不是很规范,希望你们谅解哈!
package 记事本;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Date;
public class text {
public static void baidu(){
try {
//String url = "http://www.baidu.com";
String url = "http://www.baidu.com";
java.net.URI uri = java.net.URI.create(url);
// 获取当前系统桌面扩展
java.awt.Desktop dp = java.awt.Desktop.getDesktop();
// 判断系统桌面是否支持要执行的功能
if (dp.isSupported(java.awt.Desktop.Action.BROWSE)) {
//File file = new File("D:\\aa.txt");
//dp.edit(file);// 编辑文件
dp.browse(uri);// 获取系统默认浏览器打开链接
// dp.open(file);// 用默认方式打开文件
// dp.print(file);// 用打印机打印文件
}
} catch (java.lang.NullPointerException e) {
// 此为uri为空时抛出异常
e.printStackTrace();
} catch (java.io.IOException e) {
// 此为无法获取系统默认浏览器
e.printStackTrace();}
}
public static void run(){
JFrame jf=new JFrame("记事本");
jf.setIconImage(new ImageIcon("C:\\Users\\阿力木江\\Desktop\\图标.jpg").getImage());//非常重要
jf.setBounds( 700,100,600,800 );
JTextArea jt=new JTextArea("XXXXX\n" +
"记事本",1000,1000);
String al=jt.getText();
if (al.equals( "/cls" )){
jt.setText( "" );
}
jt.setFont( new Font( "黑体",Font.BOLD,30 ) );
jt.setLineWrap( true );//自动换行
JScrollPane js=new JScrollPane(jt,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
jf.add( js );
//JScroPane用法是这样的,一定要记得
// 而且不要写jf.add(jt);
JMenuBar mb=new JMenuBar();
jf.setJMenuBar( mb );
JMenu m=new JMenu("文件(F)");
JMenuItem i=new JMenuItem("新建窗口 Ctrl+Shift+N");
m.add( i );
JMenuItem i1=new JMenuItem("新建 Ctrl+N");
m.add( i1 );
JMenuItem i2=new JMenuItem("保存(S) Ctrl+S");
m.add( i2 );
JMenuItem i3=new JMenuItem("另存为(A) Ctrl+Shift+N");
m.add( i3 );
JMenuItem i4=new JMenuItem("打开(O) open");
m.add( i4 );
JMenuItem k=new JMenuItem( "退出");
m.add( k );
JMenu m1=new JMenu("编辑(E)");
JMenuItem e1=new JMenuItem("复制");
m1.add( e1 );
m1.add( new JMenuItem("粘贴") );
m1.add( new JMenuItem("转到") );
JMenuItem ee=new JMenuItem("全选");
m1.add( ee );
JMenu m2=new JMenu("格式(Q)");
JMenu t1=new JMenu("颜色");
JMenuItem b=new JMenuItem("红色");
JMenuItem b1=new JMenuItem("绿色");
JMenuItem b2=new JMenuItem("蓝色");
JMenuItem b3=new JMenuItem("紫色");
JMenuItem b4=new JMenuItem("浅蓝色");
JMenuItem b5=new JMenuItem("澄色");
JMenuItem b6=new JMenuItem("浅紫色");
JMenuItem b7=new JMenuItem("黄色");
JMenuItem b8=new JMenuItem("黑色");
JMenuItem b9=new JMenuItem("白色");
t1.add( b );
t1.add( b1 );
t1.add( b2 );
t1.add( b3 );
t1.add( b4 );
t1.add( b5 );
t1.add( b6 );
t1.add( b7 );
t1.add( b8 );
t1.add( b9 );
m2.add( t1 );
JMenu t2=new JMenu("大小");
JMenuItem a=new JMenuItem("10");
JMenuItem a1=new JMenuItem("20");
JMenuItem a2=new JMenuItem("30");
JMenuItem a3=new JMenuItem("40");
JMenuItem a4=new JMenuItem("50");
JMenuItem a5=new JMenuItem("60");
JMenuItem a6=new JMenuItem("70");
JMenuItem a7=new JMenuItem("80");
JMenuItem a8=new JMenuItem("90");
JMenuItem a9=new JMenuItem("100");
JMenuItem a10=new JMenuItem("max");
t2.add( a );
t2.add( a1);
t2.add( a2 );
t2.add( a3 );
t2.add( a4 );
t2.add( a5 );
t2.add( a6 );
t2.add( a7 );
t2.add( a8 );
t2.add( a9 );
t2.add( a10 );
m2.add( t2 );
JMenu m3=new JMenu("查看(Y)");
JMenu jm=new JMenu("缩放");
JMenuItem je=new JMenuItem("放大 Ctrl+加");
JMenuItem je1=new JMenuItem("缩小 Ctrl-加");
JMenuItem je2=new JMenuItem("默认");
jm.add( je );
jm.add( je1 );
jm.add( je2 );
m3.add( jm );
m3.add( new JMenuItem("状态栏") );
m3.add( new JMenuItem("自动换行") );
JMenuItem me=new JMenuItem("日期/时间");
m3.add( me );
JMenu m4=new JMenu("帮助(H)");
JMenu m5=new JMenu("设置");
JButton jb=new JButton("颜色");
Choice c=new Choice();
c.add( "Change Font" );
c.add( "10" );
c.add( "20" );
c.add( "30" );
c.add( "40" );
c.add( "50" );
c.add( "60" );
m4.add( new JMenuItem("查找") );
m4.add( new JMenuItem("故障") );
JMenuItem em=new JMenuItem("遇到问题");
m4.add( em );
mb.add( m );
mb.add( m1 );
mb.add( m2);
mb.add( m3 );
mb.add( m4 );
mb.add( m5 );
mb.add( c );
mb.add( jb );
Dialog d=new Dialog( jf,"记事本",false );
d.setBounds( 300,400,500,700 );
JTextArea ja=new JTextArea(40,50);
d.add(ja);
ja.setLineWrap( true );
Dialog d1=new Dialog( jf,"记事本1",false );
d1.setBounds( 400,500,500,700 );
JTextArea ja1=new JTextArea(40,50);
d1.add( ja1 );
ja1.setLineWrap( true );
Dialog d2=new Dialog( jf,"请填写您遇到的问题",false );
d2.setBounds( 600,200,400,200 );
d2.add( new JTextArea(10,20) );
JButton bu=new JButton("百度");
bu.setFont( new Font( "黑体",Font.BOLD,30 ) );
d2.add( bu,BorderLayout.SOUTH );
FileDialog fd=new FileDialog( jf,"保存到",FileDialog.SAVE );
fd.setIconImage( new ImageIcon("C:\\Users\\阿力木江\\Desktop\\图标.jpg").getImage() );
FileDialog fd1=new FileDialog( jf,"另存为",FileDialog.LOAD );
fd1.setIconImage( new ImageIcon("C:\\Users\\阿力木江\\Desktop\\图标.jpg").getImage() );
bu.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
baidu();
}
} );
i.addActionListener(e -> {
run();
});//再次调用该方法创建另外一个记事本
i1.addActionListener(e -> {
run();
});
i2.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
fd.setVisible( true );
String ab=fd.getDirectory()+fd.getFile();
try {
BufferedWriter wr=new BufferedWriter( new FileWriter( ab ) );
String gg=jt.getText();
wr.write( gg+"\n\n\n" );
wr.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
} );
i3.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
fd1.setVisible( true );
String ab=fd1.getDirectory()+fd1.getFile();
try {
BufferedWriter wr=new BufferedWriter( new FileWriter( ab ) );
String gg=jt.getText();
wr.write( gg+"\n\n\n" );
wr.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
} );
i4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e2) {
FileDialog fileDialog = new FileDialog(jf, "打开文件", FileDialog.LOAD);
fileDialog.setVisible(true);
String abs = fileDialog.getDirectory() + fileDialog.getFile();
try {
BufferedReader re = new BufferedReader(new FileReader(abs));
String line;
while ((line=re.readLine())!= null)
jt.append(line + '\n');
re.close();
} catch (Exception e) {
e.printStackTrace();
}
}
});
a.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setFont( new Font( "",Font.PLAIN,10 ) );
}
} );
a1.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setFont( new Font( "",Font.PLAIN,20 ) );
}
} );
a2.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setFont( new Font( "",Font.PLAIN,30 ) );
}
} );
a3.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setFont( new Font( "",Font.PLAIN,40 ) );
}
} );
a4.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setFont( new Font( "",Font.PLAIN,50 ) );
}
} );
a5.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setFont( new Font( "",Font.PLAIN,60 ) );
}
} );
a6.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setFont( new Font( "",Font.PLAIN,70 ) );
}
} );
a7.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setFont( new Font( "",Font.PLAIN,80 ) );
}
} );
a8.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setFont( new Font( "",Font.PLAIN,90 ) );
}
} );
a9.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setFont( new Font( "",Font.PLAIN,100 ) );
}
} );
a10.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setFont( new Font( "",Font.BOLD,200) );
}
} );
b.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setForeground( Color.red );
}
} );
b1.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setForeground( Color.green );
}
} );
b2.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setForeground( Color.blue);
}
} );
b3.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setForeground( Color.MAGENTA );
}
} );
b4.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setForeground( Color.CYAN );
}
} );
b5.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setForeground( Color.ORANGE );
}
} );
b6.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setForeground( Color.PINK );
}
} );
b7.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setForeground( Color.yellow );
}
} );
b8.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setForeground( Color.BLACK );
}
} );
b9.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setForeground( Color.WHITE);
}
} );
ee.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String s=jt.getText();
ja.setText( s );
d.setVisible( true );
}
} );
e1.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String s1=jt.getText();
ja1.setText( s1 );
d1.setVisible( true );
}
} );
c.addItemListener( new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (c.getSelectedItem()=="10"){
jt.setFont( new Font( "黑体",Font.ITALIC,10 ) );
jt.setForeground( Color.blue );
}if (c.getSelectedItem()=="20"){
jt.setFont( new Font( "黑体",Font.BOLD,20 ) );
jt.setForeground( Color.yellow);
} if (c.getSelectedItem()=="30"){
jt.setFont( new Font( "黑体",Font.CENTER_BASELINE,30 ) );
jt.setForeground( Color.GREEN );
}
if (c.getSelectedItem()=="40"){
jt.setFont( new Font( "黑体",Font.PLAIN,40 ) );
jt.setForeground( Color.MAGENTA );
}if (c.getSelectedItem()=="50"){
jt.setFont( new Font( "黑体",Font.ROMAN_BASELINE,50 ) );
jt.setForeground( Color.PINK );
}if (c.getSelectedItem()=="60"){
jt.setFont( new Font( "黑体",Font.HANGING_BASELINE,60 ) );
jt.setForeground( Color.ORANGE );}
}
} );
me.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Date da=new Date();
String g= String.valueOf( da.getYear()+1900 );
String g1= String.valueOf( da.getMonth()+1 );
String g2= String.valueOf( da.getDay()+14);
String g3= String.valueOf( da.getHours() );
String g4= String.valueOf( da.getMinutes() );
String g5= String.valueOf( da.getSeconds() );
jt.setText( "现在是:"+g+"年"+g1+"月"+g2+"日\n" +
g3+"点"+g4+"分"+g5+"秒" );
jt.setFont( new Font( "宋体",Font.BOLD ,50) );
jt.setForeground( Color.MAGENTA );
}
} );
jb.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Color c1=JColorChooser.showDialog( jf,"颜色选择器",Color.white );
jt.setBackground( c1 );
// jt.setForeground( c1 );
}
} );
je.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setFont( new Font( "黑体",Font.BOLD,100 ) );
}
} );
je1.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jt.setFont( new Font( "黑体",Font.BOLD,25 ) );
}
} );
je2.addActionListener( e -> {
jt.setFont( new Font( "黑体",Font.BOLD,30 ) );
} );
em.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
d2.setVisible( true );
}
} );
d2.addWindowListener( new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
d2.dispose();
}
} );
k.addActionListener(e -> {
int result= JOptionPane.showConfirmDialog( jf, "是否将改动保存到C:\\User\\阿力木江\\Deskop\\alm.txt?");
if (result==JOptionPane.YES_OPTION){
fd.setVisible( true );
try {
BufferedWriter bw=new BufferedWriter( new FileWriter( "C:\\Users\\阿力木江\\Desktop\\alm.txt") );
String get=jt.getText();
bw.write( get);
bw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
System.exit( 0 );
}
});
d.addWindowListener( new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
JOptionPane.showMessageDialog( jf,"是否将改动保存到C:\\User\\阿力木江\\Deskop\\alm.txt?" );
System.exit( 0 );
}
} );
d1.addWindowListener( new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
JOptionPane.showMessageDialog( jf,"是否将改动保存到C:\\User\\阿力木江\\Deskop\\alm.txt?" );
System.exit( 0 );
}
} );
jf.setVisible( true );
jf.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
}
public static void main(String[] args) {
run();
}//487行代码写出一个完整的记事本,总用时不到一天!加油年轻人!
}
下面是我这个代码里面的Java Swing 组件和功能简单示例讲解
1. JFrame - 主窗口
import javax.swing.*;
public class JFrameExample {
public static void main(String[] args) {
// 创建JFrame实例
JFrame frame = new JFrame("我的窗口");
// 设置窗口大小
frame.setSize(400, 300);
// 设置关闭窗口时的操作
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 添加一个标签
JLabel label = new JLabel("欢迎使用Swing!", SwingConstants.CENTER);
frame.add(label);
// 显示窗口
frame.setVisible(true);
}
}
讲解:
-
JFrame
是Swing应用程序的主窗口 -
setSize()
设置窗口大小 -
setDefaultCloseOperation()
定义关闭按钮的行为 -
setVisible(true)
使窗口可见
2. JTextArea - 文本编辑区域
import javax.swing.*;
public class JTextAreaExample {
public static void main(String[] args) {
JFrame frame = new JFrame("文本编辑器");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建文本区域
JTextArea textArea = new JTextArea();
textArea.setText("在这里输入文本...");
frame.add(textArea);
frame.setVisible(true);
}
}
讲解:
-
JTextArea
是多行文本编辑组件 -
setText()
设置初始文本 -
可以添加滚动条(见下面JScrollPane)
3. JScrollPane - 滚动条
import javax.swing.*;
public class JScrollPaneExample {
public static void main(String[] args) {
JFrame frame = new JFrame("带滚动条的文本编辑器");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextArea textArea = new JTextArea();
// 将文本区域放入滚动面板
JScrollPane scrollPane = new JScrollPane(textArea);
frame.add(scrollPane);
frame.setVisible(true);
}
}
讲解:
-
JScrollPane
为组件添加滚动功能 -
只需将需要滚动的组件(如JTextArea)传入JScrollPane构造函数
4. JMenuBar 和 JMenu - 菜单系统
import javax.swing.*;
public class MenuExample {
public static void main(String[] args) {
JFrame frame = new JFrame("菜单示例");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建菜单栏
JMenuBar menuBar = new JMenuBar();
// 创建文件菜单
JMenu fileMenu = new JMenu("文件");
// 创建菜单项
JMenuItem openItem = new JMenuItem("打开");
JMenuItem saveItem = new JMenuItem("保存");
// 将菜单项添加到菜单
fileMenu.add(openItem);
fileMenu.add(saveItem);
// 将菜单添加到菜单栏
menuBar.add(fileMenu);
// 将菜单栏设置到窗口
frame.setJMenuBar(menuBar);
frame.setVisible(true);
}
}
讲解:
-
JMenuBar
是窗口顶部的菜单栏 -
JMenu
是下拉菜单(如"文件"、"编辑") -
JMenuItem
是菜单中的具体项
5. JDialog - 对话框窗口
import javax.swing.*;
public class JDialogExample {
public static void main(String[] args) {
JFrame frame = new JFrame("主窗口");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建对话框
JDialog dialog = new JDialog(frame, "这是一个对话框", true);
dialog.setSize(200, 150);
dialog.add(new JLabel("对话框内容", SwingConstants.CENTER));
JButton showButton = new JButton("显示对话框");
showButton.addActionListener(e -> dialog.setVisible(true));
frame.add(showButton);
frame.setVisible(true);
}
}
讲解:
-
JDialog
是弹出对话框 -
第一个参数指定父窗口
-
第二个参数是标题
-
第三个参数true表示模态对话框(阻塞其他窗口)
6. ActionListener - 按钮和菜单项点击
import javax.swing.*;
import java.awt.event.*;
public class ActionListenerExample {
public static void main(String[] args) {
JFrame frame = new JFrame("事件处理示例");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button = new JButton("点击我");
// 添加ActionListener
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(frame, "按钮被点击了!");
}
});
// Java 8 Lambda表达式简化写法
// button.addActionListener(e -> JOptionPane.showMessageDialog(frame, "按钮被点击了!"));
frame.add(button);
frame.setVisible(true);
}
}
讲解:
-
ActionListener
处理按钮点击等动作事件 -
实现
actionPerformed
方法定义点击后的行为 -
可以使用Lambda表达式简化代码
7. ItemListener - 下拉选择框变化
import javax.swing.*;
import java.awt.event.*;
public class ItemListenerExample {
public static void main(String[] args) {
JFrame frame = new JFrame("下拉框示例");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComboBox<String> comboBox = new JComboBox<>();
comboBox.addItem("选项1");
comboBox.addItem("选项2");
comboBox.addItem("选项3");
// 添加ItemListener
comboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
System.out.println("选择了: " + e.getItem());
}
}
});
frame.add(comboBox);
frame.setVisible(true);
}
}
讲解:
-
ItemListener
处理下拉框选项变化 -
itemStateChanged
方法在选项变化时被调用 -
getStateChange()
判断是选中还是取消选中
8. FileDialog - 文件选择
import java.awt.*;
public class FileDialogExample {
public static void main(String[] args) {
Frame frame = new Frame("文件对话框示例");
// 创建文件打开对话框
FileDialog openDialog = new FileDialog(frame, "打开文件", FileDialog.LOAD);
// 创建文件保存对话框
FileDialog saveDialog = new FileDialog(frame, "保存文件", FileDialog.SAVE);
Button openButton = new Button("打开文件");
openButton.addActionListener(e -> {
openDialog.setVisible(true);
System.out.println("选择的文件: " + openDialog.getDirectory() + openDialog.getFile());
});
Button saveButton = new Button("保存文件");
saveButton.addActionListener(e -> {
saveDialog.setVisible(true);
System.out.println("保存到: " + saveDialog.getDirectory() + saveDialog.getFile());
});
frame.add(openButton);
frame.add(saveButton);
frame.setLayout(new FlowLayout());
frame.setSize(300, 200);
frame.setVisible(true);
}
}
讲解:
-
FileDialog
提供文件选择功能 -
LOAD
模式用于打开文件 -
SAVE
模式用于保存文件 -
getDirectory()
和getFile()
获取选择的路径和文件名
9. BufferedReader/BufferedWriter - 文件读写(核心部分来了)
import java.io.*;
public class FileReadWriteExample {
public static void main(String[] args) {
// 写入文件
try (BufferedWriter writer = new BufferedWriter(new FileWriter("test.txt"))) {
writer.write("第一行文本");
writer.newLine();
writer.write("第二行文本");
} catch (IOException e) {
e.printStackTrace();
}
// 读取文件
try (BufferedReader reader = new BufferedReader(new FileReader("test.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
讲解:
-
BufferedWriter
用于高效写入文件 -
BufferedReader
用于高效读取文件 -
try-with-resources
语法自动关闭资源 -
readLine()
一次读取一行
10. JColorChooser - 颜色选择(核心部分来了)
import javax.swing.*;
import java.awt.*;
public class ColorChooserExample {
public static void main(String[] args) {
JFrame frame = new JFrame("颜色选择器");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton colorButton = new JButton("选择颜色");
JPanel colorPanel = new JPanel();
colorButton.addActionListener(e -> {
Color color = JColorChooser.showDialog(frame, "选择颜色", Color.WHITE);
if (color != null) {
colorPanel.setBackground(color);
}
});
frame.add(colorButton, BorderLayout.NORTH);
frame.add(colorPanel, BorderLayout.CENTER);
frame.setVisible(true);
}
}
讲解:
-
JColorChooser.showDialog()
显示颜色选择对话框 -
返回用户选择的
Color
对象 -
可以设置组件的背景色或前景色
11. Desktop - 浏览器打开功能
import java.awt.*;
import java.net.URI;
public class DesktopExample {
public static void main(String[] args) {
try {
// 获取Desktop实例
Desktop desktop = Desktop.getDesktop();
// 打开浏览器
desktop.browse(new URI("https://www.baidu.com"));
// 打开文件(需要文件存在)
// desktop.open(new File("test.txt"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
讲解:
-
Desktop
类可以打开默认浏览器、邮件客户端等 -
browse()
方法打开指定URL -
需要处理可能抛出的异常
12. JOptionPane - 显示各种对话框(核心)
import javax.swing.*;
public class JOptionPaneExample {
public static void main(String[] args) {
// 消息对话框
JOptionPane.showMessageDialog(null, "这是一个消息对话框", "提示", JOptionPane.INFORMATION_MESSAGE);
// 确认对话框
int option = JOptionPane.showConfirmDialog(null, "确定要删除吗?", "确认", JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION) {
System.out.println("用户选择了是");
}
// 输入对话框
String name = JOptionPane.showInputDialog("请输入你的名字:");
if (name != null) {
System.out.println("你好, " + name);
}
}
}
讲解:
-
showMessageDialog
显示消息对话框 -
showConfirmDialog
显示确认对话框,返回用户选择 -
showInputDialog
显示输入对话框,获取用户输入
差不多就这么多希望你们都喜欢,文章制作不易希望大家支持支持!!!