📄 analyser.java
字号:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Analyser extends JFrame{
private JLabel inputLabel,outputLabel,imageLabel;
private JButton open,scan,save,clear,exit,help,about;
protected JTextArea inputArea,outputArea;
private JScrollPane input,output;
private Scaner scaner;
//构造函数,用于界面初始化
public Analyser()
{
//使用本机系统外观(如果有一个)的 LookAndFeel 类的名称设置当前的默认外观。
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(this);
} catch (Exception e) {}
//设置菜单栏及其菜单项
JMenuBar bar=new JMenuBar();
setJMenuBar(bar);
//文件菜单栏及其菜单项
JMenu fileMenu=new JMenu("文件");
JMenuItem openItem=new JMenuItem("打开");
openItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
scaner.openFile();
}
});
fileMenu.add(openItem);
JMenuItem saveItem=new JMenuItem("保存结果");
saveItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
scaner.saveFile();
}
});
fileMenu.add(saveItem);
fileMenu.addSeparator(); //设置菜单项分隔线
JMenuItem exitItem=new JMenuItem("退出");
exitItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
fileMenu.add(exitItem);
bar.add(fileMenu);
//操作菜单栏及其菜单项
JMenu executeMenu=new JMenu("操作");
JMenuItem scanItem=new JMenuItem("扫描");
scanItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
scaner.scan();
}
});
executeMenu.add(scanItem);
JMenuItem clearItem=new JMenuItem("清空");
clearItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
scaner.clear();
}
});
executeMenu.add(clearItem);
bar.add(executeMenu);
//帮助菜单栏及其菜单项
JMenu helpMenu=new JMenu("帮助");
JMenuItem useItem=new JMenuItem("如何使用");
useItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
scaner.help();
}
});
helpMenu.add(useItem);
helpMenu.addSeparator(); //设置菜单项分隔线
JMenuItem aboutItem=new JMenuItem("关于...");
aboutItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
scaner.about();
}
});
helpMenu.add(aboutItem);
bar.add(helpMenu);
//设置布局为null
setLayout(null);
//按钮组的设置
open=new JButton(new ImageIcon("image\\open.gif"));
open.setToolTipText("打开文件");
scan=new JButton(new ImageIcon("image\\execute.gif"));
scan.setToolTipText("执行扫描");
save=new JButton(new ImageIcon("image\\save.gif"));
save.setToolTipText("保存结果");
clear=new JButton(new ImageIcon("image\\clear.gif"));
clear.setToolTipText("清除屏幕");
exit=new JButton(new ImageIcon("image\\exit.gif"));
exit.setToolTipText("退出程序");
help=new JButton(new ImageIcon("image\\help.gif"));
help.setToolTipText("帮助");
about=new JButton(new ImageIcon("image\\about.gif"));
about.setToolTipText("关于");
open.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
scaner.openFile();
}
});
open.setBounds(5,4,31,25);
add(open);
scan.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
scaner.scan();
}
});
scan.setBounds(46,4,31,25);
add(scan);
save.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
scaner.saveFile();
}
});
save.setBounds(87,4,29,26);
add(save);
clear.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
scaner.clear();
}
});
clear.setBounds(126,4,31,25);
add(clear);
exit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
exit.setBounds(167,4,31,25);
add(exit);
about.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
scaner.about();
}
});
about.setBounds(208,4,31,25);
add(about);
help.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
scaner.help();
}
});
help.setBounds(249,8,48,18);
add(help);
//标签和文本区域的设置
imageLabel=new JLabel(new ImageIcon("image\\image.gif"));
imageLabel.setToolTipText("这是个用Java编写的词法分析器");
imageLabel.setBounds(445,0,89,35);
add(imageLabel);
//顶部输入区域的设置
inputLabel=new JLabel("输入区域");
inputLabel.setFont(new Font("ScanSerif",Font.PLAIN,14));
inputLabel.setBounds(5,37,70,25);
add(inputLabel);
inputArea=new JTextArea(25,11);
inputArea.setForeground(new Color(50,30,230));
inputArea.setFont(new Font("Monospaced",Font.PLAIN,15));
input=new JScrollPane(inputArea);
input.setBounds(5,60,533,300);
add(input);
//底部输出结果的设置
outputLabel=new JLabel("输出结果");
outputLabel.setFont(new Font("ScanSerif",Font.PLAIN,14));
outputLabel.setBounds(5,363,70,25);
add(outputLabel);
outputArea=new JTextArea(25,11);
outputArea.setForeground(new Color(50,40,230));
outputArea.setFont(new Font("Monospaced",Font.PLAIN,14));
outputArea.setEditable(false);
output=new JScrollPane(outputArea);
output.setBounds(5,387,533,120);
add(output);
//程序显示设置
setTitle("词法分析器");
setVisible(true);
setResizable(false);
setBounds(300,100,550,570);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
validate(); //当重新添加新子控件时,调用此方法来使添加生效,相当于刷新
scaner=new Scaner(this); //为该程序添加控制器,控制器主要完成后台工作
}
public static void main(String[] args)
{
new Analyser(); //启动程序
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -