java 图形用户界面

一、需求

编写一个Java源程序,其中包含:
编写一个包含主方法main的公共类(访问权限为public的类),该类继承自窗体类JFrame,并且,该类实现了接口ActionListener(也就是说,实现了接口ActionListener的方法actionPerformed)。
源程序实现的任务是实现如下图所示的图形用户界面:

java 图形用户界面_第1张图片

(1)可以在“请输入文件路径和名称:”后面的文本框中输入文件名和路径。
(2)可以在文本区中写文本,例如,文本区中的前三行内容。
(3)可以在“请输入需要追加的内容:”后面的文本域中输入内容,按回车键之后,其中的内容会添加到文本区中(添加的内容另起一行),例如,文本区中的“北京”。
(4)单击“将文本区的内容写入文件”按钮,文本区中的内容就会被写到指定的文件中,如下图所示。

java 图形用户界面_第2张图片


二、代码

public class GUI
{
    //临时变量存放文件名
    static File file = null;
    public static void main(String[] args)
    {
        //JFrame窗体
        JFrame jFrame = new JFrame();
        //中间容器
        JPanel jPanel = new JPanel();
        ScrollPane ScrollPane = new ScrollPane();
        //组件
        JLabel jL1 = new JLabel("文件名称:");
        JTextField jTF1 = new JTextField("请输入文件路径和名称...", 20);
        JTextArea jTextArea = new JTextArea(15, 15);
        jTextArea.setEditable(false);//设置jTextArea不可编辑
        JButton jB1 = new JButton("选择文件");
        JTextField jTF2 = new JTextField("请输入需要追加的内容...", 20);
        JLabel jL2 = new JLabel("追加内容:");
        JButton jB2 = new JButton("写入文件");
        //添加组件
        jPanel.add(jL1);
        jPanel.add(jTF1);
        jPanel.add(jB1);
        jPanel.add(jL2);
        jPanel.add(jTF2);
        jPanel.add(jB2);
        jPanel.add(jTextArea);
        jFrame.add(jPanel,BorderLayout.NORTH);
        ScrollPane.add(jTextArea);
        jFrame.add(ScrollPane,BorderLayout.CENTER);
        //设置北区大小
        jPanel.setPreferredSize(new Dimension(0,80));
        //使用工具类进行初始化
        JFrameUtil.initFrame(jFrame, 490, 500);
        //为jTF1新建鼠标监听事件
        jTF1.addMouseListener(new MouseAdapter()
        {
            //鼠标移入清除默认提示
            public void mouseEntered(MouseEvent e)
            {
                JTextField f = (JTextField) e.getSource();
                if ("请输入文件路径和名称...".equals(f.getText()))
                {
                    f.setText(null);
                }
            }
            //鼠标移出,若内容为空则恢复提示
            public void mouseExited(MouseEvent e)
            {
                JTextField f = (JTextField) e.getSource();
                if ("".equals(f.getText()) || f.getText() == null)
                {
                    f.setText("请输入文件路径和名称...");
                }
            }
        });
        //为jTF1新建回车监听事件
        jTF1.addActionListener(new AbstractAction()
        {
            public void actionPerformed(ActionEvent e)
            {
                JTextField f = (JTextField) e.getSource();
                file = new File(f.getText().trim());
                try
                {
                    Reader reader = new FileReader(file);
                    char[] cbuf = new char[1024];
                    int length;
                    while((length = reader.read(cbuf))!=-1)
                    {
                        jTextArea.setText(new String(cbuf,0,length));
                    }
                } catch (IOException ex)
                {
                    ex.printStackTrace();
                }
            }
        });
        //为jB1新建点击监听事件
        jB1.addActionListener(new AbstractAction()
        {
            public void actionPerformed(ActionEvent e)
            {
                FileDialog dialog = new FileDialog(jFrame, "请选择文件", FileDialog.LOAD);
                dialog.setVisible(true);
                //获取用户选择的文件名
                String path = dialog.getDirectory();
                String filename = dialog.getFile();
                if(path!=null||filename!=null)
                {
                    jTF1.setText(path + filename);
                }
                try
                {
                    file = new File(path,filename);
                    Reader reader = new FileReader(file);
                    char[] cbuf = new char[1024];
                    int length;
                    while((length = reader.read(cbuf))!=-1)
                    {
                        jTextArea.setText(new String(cbuf,0,length));
                    }
                } catch (IOException ex)
                {
                    ex.printStackTrace();
                }
            }
        });
        //为jTF2新建鼠标监听事件
        jTF2.addMouseListener(new MouseAdapter()
        {
            public void mouseEntered(MouseEvent e)
            {
                JTextField f = (JTextField) e.getSource();
                if ("请输入需要追加的内容...".equals(f.getText()))
                {
                    f.setText(null);
                }
            }
        });
        //为jTF2新建回车监听事件
        jTF2.addActionListener(new AbstractAction()
        {
            public void actionPerformed(ActionEvent e)
            {
                JTextField f = (JTextField) e.getSource();
                if(f.getText()==null||f.getText().length()==0)
                {
                    JOptionPane.showMessageDialog(jFrame,"请输入追加内容","通知",JOptionPane.INFORMATION_MESSAGE);
                }
                else
                {
                    jTextArea.setText(jTextArea.getText() + f.getText() + "\r\n");
                }
                jTF2.setText(null);
            }
        });
        //为jB2新建点击监听事件
        jB2.addActionListener(new AbstractAction()
        {
            public void actionPerformed(ActionEvent e)
            {
                try
                {
                    FileWriter fileWriter = new FileWriter(file);
                    //获取文本域的内容
                    String content = jTextArea.getText();
                    System.out.println(jTextArea.getText());
                    //写出内容
                    fileWriter.write(content);
                    fileWriter.close();
                    JOptionPane.showMessageDialog(jFrame,"写入成功","恭喜",JOptionPane.INFORMATION_MESSAGE);
                } catch (IOException ex)
                {
                    ex.printStackTrace();
                }
            }
        });

    }
}

//该类为JFrame工具类,用于初始化Frame窗口
class JFrameUtil
{
    //获取屏幕分辨率
    public static void initFrame(JFrame frame, int width, int height)
    {
        //设置窗体可见性
        frame.setVisible(true);
        //frame.setSize(300,400);
        //获取一个与系统相关的工具类对象,获取电脑分辨率
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Dimension dimension = toolkit.getScreenSize();
        //左上角x坐标、左上角y坐标、窗体的宽、窗体的高
        int x = (int) dimension.getWidth();
        int y = (int) dimension.getHeight();
        //设置窗体(左上角)出现的位置,将位置设置成最中间
        frame.setBounds((x - width) / 2, (y - height) / 2, width, height);
        //设置关闭选项
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //设置窗体不可改变大小
        frame.setResizable(false);
    }
}

三、运行截图

java 图形用户界面_第3张图片

你可能感兴趣的:(java基础)