一、需求
编写一个Java源程序,其中包含:
编写一个包含主方法main的公共类(访问权限为public的类),该类继承自窗体类JFrame,并且,该类实现了接口ActionListener(也就是说,实现了接口ActionListener的方法actionPerformed)。
源程序实现的任务是实现如下图所示的图形用户界面:
(1)可以在“请输入文件路径和名称:”后面的文本框中输入文件名和路径。
(2)可以在文本区中写文本,例如,文本区中的前三行内容。
(3)可以在“请输入需要追加的内容:”后面的文本域中输入内容,按回车键之后,其中的内容会添加到文本区中(添加的内容另起一行),例如,文本区中的“北京”。
(4)单击“将文本区的内容写入文件”按钮,文本区中的内容就会被写到指定的文件中,如下图所示。
二、代码
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);
}
}