使用javaswing图形化界面来写一个记事本程序,超牛逼!!!

功能概述

这个Java Swing实现的记事本程序提供了以下主要功能:

  1. 基本文本编辑功能:创建、编辑和保存文本内容

  2. 文件操作:新建、打开、保存、另存为文件

  3. 格式设置:调整字体大小、颜色、背景色

  4. 查看选项:缩放功能(放大、缩小、默认)

  5. 辅助功能:插入日期/时间、自动换行、状态栏

  6. 帮助系统:包含问题反馈和百度搜索功能

  7. 多窗口支持:可以同时打开多个记事本窗口

核心技术

  1. Swing组件

    • JFrame 作为主窗口

    • JTextArea 作为文本编辑区域

    • JScrollPane 实现滚动条

    • JMenuBar 和 JMenu 实现菜单系统

    • JDialog 用于对话框窗口

  2. 事件处理

    • 使用ActionListener处理按钮和菜单项点击

    • 使用ItemListener处理下拉选择框变化

  3. 文件操作

    • 使用FileDialog实现文件选择

    • 使用BufferedReader/BufferedWriter进行文件读写

  4. 其他技术

    • JColorChooser 实现颜色选择

    • Desktop 类实现浏览器打开功能

    • JOptionPane 显示各种对话框

核心组件

  1. 文本编辑区JTextArea 是核心组件,所有文本编辑功能都围绕它实现

  2. 菜单系统:提供所有功能的入口,组织良好

  3. 对话框系统:包括文件对话框、颜色选择器等

  4. 辅助窗口:如问题反馈窗口、复制内容查看窗口等

对学习者的好处

  1. Swing学习范例

    • 展示了完整的Swing应用程序结构

    • 演示了各种Swing组件的使用方法

    • 展示了组件布局和事件处理的实践

  2. Java基础巩固

    • 文件I/O操作

    • 事件处理机制

    • 面向对象编程实践

  3. 项目结构学习

    • 展示了如何组织一个相对复杂的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 显示输入对话框,获取用户输入

差不多就这么多希望你们都喜欢,文章制作不易希望大家支持支持!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@程序员ALMJ

打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值