完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
随着互联网技术的快速发展,Java语言以其简单可靠,安全性高,可移植性强等特点得到极大普及,长期占据编程语言排行榜第一的位置,特别是在嵌入式领域得到了越来越多的应用。为了满足客户在嵌入式主板上运行Java程序的需求,英创公司在ESM335x、ESM6800等主流产品型号中移植了针对嵌入式Linux的JRE(Java Runtime Environment),以支持常规的Java通讯、控制类程序的运行。JRE的运行需要占用的内存超过100MB,英创公司的低成本嵌入式主板ESM6800H和ESM6800V即可满足Java虚拟机对硬件环境的要求。进一步,ESM6800H和ESM6800V这二款型号的主板还可以支持X11图形系统。在X11图形系统的环境中,就可以直接通过Java的图形用户接口实现图形界面的开发,其开发过程类似于WinCE+C#,这样就弥补了ESM6800没有WinCE系统,从而不能使用C#开发界面的遗憾。 Java的图形用户接口可以让用户构建一个通用的界面,使其在所有平台上都能正常显示,Java构建界面要使用抽象窗口工具包AWT(Abstract Window Toolkit)和Swing。Swing可以看作是AWT的改良版,而不是代替AWT,是对AWT的提高和扩展。所以,在实现界面的程序中,Swing和AWT都要用到,它们共存于Java基础类(Java Foundation Class,JFC)中。用户通过英创公司提供的eclipse软件就能够完成图形界面程序的开发。环境搭建的详细方法可以参考文章:《英创主板JAVA应用开发简介》。本文主要简要介绍何如使用Java实现图形界面。 Java的图形接口组件按其作用可分为基本组件(Component)和容器(Container)两大类:基本组件,不能容纳其他组件,如按钮、文本框等图形界面元素。容器可以用来容纳其他的组件,如窗口、对话框等,下面是常用组件的列表。
图形窗口一般是上述各个组件的承载体,处于非常重要的位置,在JAVA中常用的窗体包括JFrame和JDialog这两种形式。
我们以串口通讯为例,通过Java实现一个简单的串口测试界面。 窗口是图形界面的基础,所有用户设计的可视组件都是放在窗口中的,所以首先我们需要构建一个窗口,下面我们就使用框架窗口(JFrame)来构建一个窗口对象: public class MainGui extends JFrame { public MainGui() { setSize(800, 480); setTitle("串口测试程序"); setLocationRelativeTo(null); setDefaultCloseOperation(MainGui.EXIT_ON_CLOSE); setVisible(true); } } 我们给窗口取名为“串口测试程序”,接下来我们在串口上增加提供打开串口操作、关闭串口操作和发送数据的按钮,按钮(JButton)在界面中用于触发动作事件,按钮上可以显示文本,当按钮动作时,能触发动作事件,按钮动作事件的相关接口类是ActionListener, 构建按钮的部分代码如下: class RightPanel extends JPanel { public RightPanel() { this.setLayout(new GridLayout(13, 1, 0, 5));
JButton button_open = new JButton("打开串口"); JButton button_write = new JButton("发送"); JButton button_close = new JButton("关闭串口"); button_open.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mes = tty + ":" + baud + "-8-1-0"; exitflag = true; if(Serial_Port.openport(mes.toString()) == -1) JOptionPane.showMessageDialog(null,"open fail!","消息框",JOptionPane.YES_OPTION); button_open.setEnabled(false); button_write.setEnabled(true); button_close.setEnabled(true); } });
button_write.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String strs = textPane.getText(); String send_buf = ToolsFunc.formatHexString(strs); System.out.print(send_buf.length()); if(send_buf.length() > 1) { System.out.println(send_buf); Serial_Port.writeport(strs); } } });
button_close.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Serial_Port.closeport(); button_open.setEnabled(true); button_write.setEnabled(false); button_close.setEnabled(false); } });
add(button_open); add(button_write); add(button_close);
button_open.setEnabled(true); button_write.setEnabled(false); button_close.setEnabled(false); } } 接下来我们为串口的接受和发送的数据添加两个显示区域,可以选择文本框(JTextField)和文本区(JTextArea)来实现,文本框与文本区的主要区别是文本区可存放多行文本。在这里我们选用文本区来实现,并用GridBagLayout进行两个文本区的布局管理,构建文本区的部分代码如下: class CenterPanel extends JPanel { public CenterPanel() { GridBagLayout layout = new GridBagLayout(); GridBagConstraints s= new GridBagConstraints(); this.setLayout(layout);
textField = new JTextArea(20, 50); textField.setTabSize(4); textField.setLineWrap(true); textField.setEditable(false); JScrollPane jscrollPane = new JScrollPane(textField);
textPane = new JTextArea(1, 50); textPane.setCursor(new Cursor(Cursor.TEXT_CURSOR)); JScrollPane jscrollPane_1 = new JScrollPane(textPane); textPane.setLineWrap(true);
this.add(jscrollPane); this.add(jscrollPane_1); s.gridwidth=0; s.weightx = 0.5; s.ipady = 320; s.ipadx = 640; s.weighty=0.8; layout.setConstraints(jscrollPane, s); s.gridwidth=0; s.weightx = 0.5; s.ipady = 10; s.weighty=0.1; layout.setConstraints(jscrollPane_1, s); } } 通过Java实现的界面如下图: 本篇文章只对界面的实现进行了简单的介绍,关于对于串口的操作,英创公司将提供访问硬件所需的名为libemtronixhardware.so的动态库和相关接口Java类源文件给客户。libemtronixhardware.so完全符合JNI规范,用户加载之后,即可通过英创公司提供的java类,访问硬件接口。 如果需要完整代码,可与英创公司的工程师联系索取。 |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 08:01 , Processed in 0.705989 second(s), Total 48, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号