项目中需要一个发送指令到指定服务端,取得设备ID及检测数据的小工具,就利用jswing开发了一个简单小组件,最终效果如下:

代码很简单,具体片段如下:

Window.java

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants; /**
* @author
* @todo 主窗体
*/
@SuppressWarnings("serial")
public class Window extends JFrame {
public Window() {
super("工具");
setSize(500, 300);
setLocationRelativeTo(null);
setResizable(false);
setVisible(true);
add(new Panels().set());
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
} } class Panels {
public JPanel set() {
// 设置面板
JPanel panels = new JPanel();// 外层面板
JPanel panel1 = new JPanel();// 端口指令面板
JPanel panel2 = new JPanel();// 操作按钮面板
JPanel panel3 = new JPanel();// 返回结果面板
// 设置下拉
// 设置文本
JLabel label = new JLabel();// 指令
JLabel label2 = new JLabel();// 结果 // 端口
final JComboBox combox = new JComboBox(new Integer[] { 30003, 30005,
30006, 30008 });
// 设置指令框
final JTextField text = new JTextField();
// 设置文本域
final JTextArea textarea = new JTextArea();
// 设置按钮
JButton button = new JButton("测试");
JButton button2 = new JButton("清空");
JScrollPane scrollpane = new JScrollPane(textarea);
scrollpane.setBorder(javax.swing.BorderFactory
.createLineBorder(Color.GRAY));//设置边框颜色 combox.setPreferredSize(new Dimension(80, 20));//设置下拉长宽 label.setText("指令:");
text.setColumns(27);
text.setBorder(javax.swing.BorderFactory.createLineBorder(Color.GRAY)); textarea.setEditable(false);
textarea.setRows(9);
textarea.setColumns(35);
label2.setText("结果:"); button.setHorizontalTextPosition(SwingConstants.CENTER);//设置横向位置
button2.setHorizontalTextPosition(SwingConstants.CENTER);//设置横向位置
// 设置按钮事件
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent args) {
String textval = text.getText();
Integer port = Integer.valueOf(combox.getSelectedItem()
.toString());
if ("".equals(textval.trim())) {
Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null, "请输入指令!", null,
JOptionPane.WARNING_MESSAGE);
return;
}
textarea.append("请求:" + textval + "\n");
textarea.append(new Connect().doConnection(port, textval)
+ "\n");
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent args) {
textarea.setText("");
}
});
// 添加至面板
panel1.add(label);
panel1.add(combox);
panel1.add(text);
panel2.add(button);
panel2.add(button2);
panel3.add(label2); scrollpane
.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);//设置文本域不显示横向滚动条
panel3.add(scrollpane);
panels.add(panel1);
panels.add(panel2);
panels.add(panel3);
return panels;
}
}

Connect.java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException; /**
* @author
* @todo 发送指令 获取设备信息及数据
*/
public class Connect {
public String doConnection(int port, String command) {
String result;
ServerSocket server = null;
Socket socket = null;
try {
server = new ServerSocket(port); server.setSoTimeout(5000);
socket = server.accept(); InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream(); os.write(command.getBytes());
os.flush(); byte[] response = getResponse();
is.read(new byte[1024]);
String valuestr = new String(response);
result = "成功:" + valuestr; } catch (SocketTimeoutException e) {
result = "失败:连接超时!";
} catch (IOException e) {
result = "失败:读写异常!";
}
try {
if (socket != null) {
socket.close();
}
if (server != null) {
server.close();
}
} catch (IOException e) {
e.printStackTrace();
} return result;
} public byte[] getResponse() {
return new byte[1024];
}
}

Console.java

/**
* @author
* @todo 窗体入口
*/
public class Console { public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Window();
}
});
}
}

JSWING小工具的更多相关文章

  1. 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

  2. 【原】得心应手小工具开发——IE代理快速切换工具

    一.引入 因为公司里上外网要经常换IE代理地址,每次切换地址都要进到Internet Options里去设置一番,经常切换的话很是麻烦,由于用了点时间作个小工具来方便自己. 二.实现思路 其实思路很简 ...

  3. ContentProvider域名替换小工具

    开发项目域名想怎么换就怎么换,就是这么任性! 这是一个很有意思的小工具! 这是一个方便开发人员和测试人员的小工具!! 吐槽: 一直在做Android开发,一直总有一个问题存在:做自己公司的apk开发时 ...

  4. c 小工具的使用

    1. 这是一个gps 数据过滤的小工具,目的是过滤到gps数据中不符合要求的数据,然后转为json 数据 需要两个小工具 bermuda.c   ------>  过滤一定范围的数据 geo2j ...

  5. 偷懒小工具 - SSO单点登录通用类(可跨域)

    写在前面的话 上次发布过一篇同样标题的文章.但是因为跨域方面做得不太理想.我进行了修改,并重新分享给大家. 如果这篇文章对您有所帮助,请您点击一下推荐.以便有动力分享出更多的"偷懒小工具&q ...

  6. [原创] Delphi小工具(Windows资源管理器右键菜单扩展)

    两个小工具 1. 项目临时文件清理 2. Android Ndk 编译 c/c++ jni 源码工具. 下载后,点击Reg.bat就可以完成注册安装.不需要时点击 UnReg.Bat 就可以删除菜单. ...

  7. 介绍两个Ubuntu上的桌面小工具

    经常使用Windows10,Sticky Notes和壁纸自动切换功能挺好用的.我经常会使用Sticky Notes来记录一些信息,内容是实时保存的,而且启动的时候会自动显示在桌面上.其实Ubuntu ...

  8. WPF根据Oracle数据库的表,生成CS文件小工具

    开发小工具的原因: 1.我们公司的开发是客户端用C#,服务端用Java,前后台在通讯交互的时候,会用到Oracle数据库的字段,因为服务器端有公司总经理开发的一个根据Oracle数据库的表生成的cla ...

  9. WPF开发查询加班小工具

    先说一下,我们公司是六点下班,超过7点开始算加班,但是加班的时间是从六点开始计算,以0.5个小时为计数,就是你到了六点半,不算加班半小时,但是加班到七点半,就是加班了一个半小时. 一.打卡记录 首先, ...

随机推荐

  1. NSIndexPath的初始化方法

    好几次用到了NSIndexPath,但是一直不知道怎么通过 row   section这两个参数来初始化 NSIndexPath *index = [NSIndexPath indexPathForR ...

  2. 混淆篇之原生DOM操作方法小结

    1.0   DOM结构 1.1先来看结构图: 父节点        兄弟节点        当前节点            属性节点            子节点        兄弟节点一般任意一个节 ...

  3. Properties文件的XML格式(转)

    想必大家都用过*.properties文件,作为配置文件.但是,如果该文件写入了中文,待编译后内容就会成为乱码,使用native命令也好.使用ant执行编码转换也好,多少有点麻烦,与其如此,我们不如直 ...

  4. 加密传输SSL协议4_综合方案

    隔了那么多天终于有时间继续把这个专题做完了,这次一定连续写完这方面的笔记. 上篇博文说明了非对称加密和对称加密各自的优缺点,那么就很自然的衍生出了一种综合的方案. 两种方案的结合--扬长避短 首先发送 ...

  5. CSS自学笔记(7):CSS定位

    很多时候,我们需要对一些元素进行自定义排序.布局等,这是就需要用到CSS的定位属性了,用这些属性对一些元素进行自定义排序.布局等操作,可以改变浏览器默认的死板的排序. CSS定位的功能很容易理解,它允 ...

  6. C语言入门(6)——C语言常用数学函数

    在编码过程中会经遇到数学运算,幸运的是C语言提供了非常丰富的数学函数库. 在数学中使用函数有时候书写可以省略括号,而C语言要求一定要加上括号,例如sin(pi/2)这种形式.在C语言的术语中,pi/2 ...

  7. C语言入门(3)——对Hello World程序的解释

    上篇我们写了一个最简单的程序.这个简单的程序包含了很多重要的内容.本篇我们通过这个最简单的Hello World程序逐一讲解C语言程序的一些特点. 打开Visual Studio 2013 通过菜单- ...

  8. poj2521---lose money

    #include <stdio.h> #include <stdlib.h> int rever(int n) { return -n; } int main() { int ...

  9. 将外部准备好的sqlite导入到项目当中

    首先,将sqlite数据库文件放在Resource文件夹下,并且允许其编译到项目当中. 之后在AppDelegate当中执行一些代码,这里将代码封装了一个Helper: #import "R ...

  10. 调用父类Controller错误

    在写一个控制器的时候,要特别注意本类继承的父类.不要继承错了.如图: ,这样就会一直是显示父类的控制器,而不是显示本类的控制器视图. 应该改为: 这些都是平时遇到的一些小问题,留着提醒自己.