Lua语言简易集成开发环境--五:开机界面和帮助文档以及总结

开机界面和帮助文档

这部分主要是想着能够使这个毕设更加的完整。
开机界面如图:
在这里插入图片描述
代码实现:

 Display display = new Display();
	        Shell shell = new Shell(display, SWT.NO_TRIM);
	        
	        // 获取图片大小并设置窗口大小
	        Image background = new Image(display, "C:\\Users\\ZYF\\Desktop\\lua.jpg");
	        Rectangle bounds = background.getBounds();
	        shell.setSize(bounds.width, bounds.height);
	        
	        // 设置窗口居中
	        Rectangle screen = display.getPrimaryMonitor().getBounds();
	        int x = (screen.width - shell.getSize().x) / 2;
	        int y = (screen.height - shell.getSize().y) / 2;
	        shell.setLocation(x, y);
	        
	        // 设置背景
	        shell.setBackgroundImage(background);
	        
	        // 设置布局
	        GridLayout layout = new GridLayout();
	        layout.numColumns = 1;
	        shell.setLayout(layout);
	        
	        // 添加启动按钮
	        Button button = new Button(shell, SWT.PUSH);
	        button.setText("启动编辑器");
	        GridData data = new GridData(SWT.CENTER, SWT.BOTTOM, false, false);
	        data.widthHint = 150; // 设置按钮的宽度
	        data.heightHint = 40; // 设置按钮的高度
	        data.horizontalIndent = 250; // 按钮水平偏移
	        data.verticalIndent = 350; // 按钮垂直偏移
	        button.setLayoutData(data); // 设置按钮的布局
	        button.addSelectionListener(new SelectionAdapter() {
	            @Override
	            public void widgetSelected(SelectionEvent e) {
	                shell.dispose();
	                new UI();
	            }

帮助文档如图:
在这里插入图片描述
代码实现:

super("Lua 帮助");

        // 创建主面板并设置布局
        JPanel mainPanel = new JPanel(new BorderLayout(10,10));
        mainPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));

        // 创建面板标题,并加入主面板北部
        JLabel titleLabel = new JLabel("Lua 语言特点与常用函数", JLabel.CENTER);
        titleLabel.setFont(new Font("微软雅黑", Font.BOLD, 20));
        mainPanel.add(titleLabel, BorderLayout.NORTH);

        // 创建语法文本区域,并加入主面板中央
        syntaxArea = new JTextArea();
        syntaxArea.setEditable(false);
        syntaxArea.setColumns(40);
        syntaxArea.setRows(15);
        syntaxArea.setFont(new Font("微软雅黑", Font.PLAIN, 14));
        // 设置语法文本
        String syntaxText = "Lua 语法介绍:\n\n" +
                "-- 单行注释以两个短横线开头\n\n" +
                "-- 多行注释使用正斜杠和星号的组合\n\n" +
                "-- 变量赋值\n" +
                "variable_name = value\n\n" +
                "-- 条件语句\n" +
                "if variable_name == value then\n" +
                "    -- 代码块\n" +
                "elseif variable_name == value2 then\n" +
                "    -- 代码块\n" +
                "else\n" +
                "    -- 代码块\n" +
                "end\n\n" +
                "-- 循环语句\n" +
                "while variable_name < value do\n" +
                "    -- 代码块\n" +
                "end\n\n" +
                "for i=1,10 do\n" +
                "    -- 代码块\n" +
                "end";
        syntaxArea.setText(syntaxText);
        JScrollPane syntaxScrollPane = new JScrollPane(syntaxArea);
        syntaxScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        syntaxScrollPane.setBorder(BorderFactory.createTitledBorder("Lua 语法"));
        mainPanel.add(syntaxScrollPane, BorderLayout.CENTER);

        // 创建函数文本区域,并加入主面板南部
        functionsArea = new JTextArea();
        functionsArea.setEditable(false);
        functionsArea.setColumns(40);
        functionsArea.setRows(15);
        functionsArea.setFont(new Font("微软雅黑", Font.PLAIN, 14));
        // 设置函数文本
        String functionsText = "Lua 常用函数介绍:\n\n" +
                "print(\"文本\") -- 在控制台中输出文本\n\n" +
                "math.randomseed(os.time())\n" +
                "math.random(lower, upper) -- 返回 lower 和 upper 之间的随机数\n\n" +
                "table.insert(table_name, value) -- 在表的末尾插入值\n" +
                "table.remove(table_name, index) -- 从表中删除指定索引的元素\n\n" +
                "string.sub(string_name, start_index, end_index) -- 返回从 start_index 到 end_index 的子字符串\n\n" +
                "os.time() -- 返回当前时间(单位:秒)\n" +
                "os.date(\"format\", time) -- 将给定时间按照给定的格式字符串格式化\n\n" +
                "io.open(filename, mode) -- 使用给定的模式打开给定名称的文件 (r, w, a 等)\n" +
                "io.read(format) -- 读取文件时使用给定格式\n" +
                "io.write(value) -- 将值写入文件\n" +
                "io.close() -- 关闭文件";
        functionsArea.setText(functionsText);
        JScrollPane functionsScrollPane = new JScrollPane(functionsArea);
        functionsScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        functionsScrollPane.setBorder(BorderFactory.createTitledBorder("常用函数介绍"));
        mainPanel.add(functionsScrollPane, BorderLayout.SOUTH);

        // 创建关闭按钮,并加入主面板东部
        JButton closeButton = new JButton("关闭");
        closeButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                setVisible(false);
                dispose();
            }
        });
        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        buttonPanel.add(closeButton);
        mainPanel.add(buttonPanel, BorderLayout.EAST);

        // 将主面板添加到窗体中
        add(mainPanel);

        // 设置窗体属性
        pack();
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

总结整个项目:

1.其实文本布局用SourceViewer会更好一些,要比styledText更加容易扩展一些功能,以及更容易写代码高亮。
2.进一步要是优化的话可以将调试部分改成具有互动的,以及左边可以加一个树状文件目录展示

以下是一些参考的博客链接:
https://blog.csdn.net/Mark7758/article/details/106885566
(简易文本编辑器)
https://blog.csdn.net/too_much_bug/article/details/124595658
(c++ qml lua简易集成开发)
https://www.freesion.com/article/3791227202/
(文件打开到客户区)
https://blog.csdn.net/ruan_luqingnian/article/details/113549586?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-113549586-blog-103637680.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-113549586-blog-103637680.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=3
(文件打开保存实现)
https://www.mianshigee.com/note/detail/137995vpl/
(运用swt编写桌面记事本)
https://blog.csdn.net/weixin_35907189/article/details/114144412?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-114144412-blog-114072905.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-114144412-blog-114072905.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=4
(richtext 代码高亮)
http://www.blogjava.net/fredcn/archive/2011/10/12/361027.html
(styledText实现关键字高亮)
https://www.cnblogs.com/plumsq/p/8386475.html
(代码高亮+内容助手)
https://blog.csdn.net/pankun/article/details/4055614
(调试器制作)
https://blog.csdn.net/weixin_33826994/article/details/114115135?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-4-114115135-blog-20871185.235v27pc_relevant_multi_platform_whitelistv3&spm=1001.2101.3001.4242.3&utm_relevant_index=7
(文本编辑器的细节,比如快捷键设置)
https://blog.csdn.net/qq_59384418/article/details/125528562
(文件保存什么的)
https://www.cnblogs.com/null-/p/10037174.html
(运行)
http://www.360doc.com/content/13/1125/12/7669533_332003060.shtml
(断点绘画)

以及一些遇到的问题:
1.styledtext文本框不随窗口改变(已解决)√
2.自动换行后,多行显示没有了
3.从中间一行开始删除时,多行显示数字就不连贯了(已解决 在行监听事件里每次有动静都重画一次)√
4.文件保存实现和另存为目前没有区别(已解决)√
5.styledText没有代码着色那些接口,得换用sourceviewer(解决还是用的styledText)√
6.应用sourceviewer包 有 is not accessible问题(解决:将模块包转到class路径里就解决了)√
7.文件保存以及打开等对话框后缀没实现文件格式的过滤
8.多行注释相匹配的正则表达式不匹配多行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值