JSWING小工具

项目中需要一个发送指令到指定服务端,取得设备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();
            }
        });
    }
}

时间: 2024-10-13 13:25:24

JSWING小工具的相关文章

大有学问的刷漆小工具

在进行装修过程中占有相当重要的一部分--刷漆,因为墙面粉刷的结果会直接影响着整个家装的质量.要做到完美粉刷墙面当然少不了我们刷漆小工具,这些工具都有哪些呢?让我们一起来看看吧. 工具之一--需用滚筒刷墙面 又称滚筒,需搭配漆盘使用的滚筒刷,由于滚面范围广,所以是最省力.省时的刷具,尤其是接上延长杆后,可轻易粉刷墙面高处或天花板,但缺点是容易产生漆料喷溅的状况,所以滚筒刷的毛不要太短,但一定要细,这样刷出来的漆膜才会手感细腻. 滚筒刷分长毛,中毛.短毛三种,其表现为滚筒刷毛的长短,而不是滚筒本身的

手把手教你做音乐播放器(八)桌面小工具(上)

第8节 桌面小工具 桌面小工具是可以放置在主界面的.快速控制应用的小助手.例如我们的音乐小工具,它可以帮助用户在桌面上就完成音乐的暂停.播放.切换等操作,而不需要启动应用本身. 在安卓系统中,我们也常常叫它App widget. 实现一个App widget要经过以下几个步骤, 创建一个App widget类,让它继承自AppWidgetProvider,例如AnddleMusicAppWidget类: 放在res\layout目录下,为App widget的界面定义一个布局,例如anddle_

这些小工具让你的Android 开发更高效

在做Android 开发过程中,会遇到一些小的问题,虽然自己动手也能解决,但是有了一些小工具,解决这些问题就得心应手了,今天就为大家推荐一下Android 开发遇到的小工具,来让你的开发更高效. Vysor Vysor 是一个可以将手机的屏幕投影到电脑上,当然也可以操作,当我们做分享或者演示的时候,这个工具起到了作用. Vector Asset Android Studio 在1.4 支持了VectorAsset,所谓VectorAsset:它可以帮助你在Android 项目中添加Materia

原创SQlServer数据库生成简单的说明文档小工具(附源码)

这是一款简单的数据库文档生成工具,主要实现了SQlServer生成说明文档的小工具,目前不够完善,主要可以把数据库的表以及表的详细字段信息,导出到 Word中,可以方便开发人员了解数据库的信息或写技术说明文档. 技术上主要采用的 C#+Dapper+Npod ,开发工具为Vs2015,基于Net4.5框架. 实现思路: 1.首先获取数据库的字符串,测试链接是否成功, 2.通过脚本获取该服务器的数据库列表. 3.根据数据库找到该数据库的所有数据表 4.通过脚本找到该数据表所有的字段信息 5.使用N

Java正则表达式——测试正则表达式的一个小工具

正则表达式是一种强大而灵活的文本处理工具.使用它我们能以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索.一旦找到了匹配这些模式的部分,你就能够随心所欲地对它们进行处理. 关于正则表达式的语法,网上对此有介绍的文章实在是多不胜数,实在找不到,还可以查看Java的API文档,就不多介绍了.这里主要介绍一个可以测试正则表达式的小工具.直接上代码: 1 package com.test.stringregex; 2 //{Args: abcabcabcdefabc "abc+" &q

JSON格式化着色小工具

在我们系统开发过程中越来越多的使用JSON作为数据交换的载体.JSON的特点是层次结构简洁清晰,易于人阅读和编写.同时也易于机器解析和生成.对于机器解析和生成这点本人表示认可,然而对于易于人阅读和编写可以通过下面一段JSON字符串来验证下: {"strValue":"here is str value","nullValue":null,"intvalue":999,"doublevalue":999,&q

强大的pdf文件操作小工具——PDFtk的小白用法

前言 作为程序员,大家都知道的,总是会被技术小白问各种跟编程没什么关系的硬件.软件问题.曾经被一技术小白同事问到有没有什么办法合并pdf文件,当时自己也是一头雾水,因为自己工作生活很少会去操作pdf文件,而当时公司对开发人员的电脑权限管理很严格,不论是上网还是安装软件,都受到很大限制,最后硬着头皮忙活了一阵子也没在解决. 前两天在写批处理程序的时候,发现批处理程序是有合并文件的命令的,我忽然想起之前这个同事的问题,就试了一下合并pdf,然而并不行.虽然失落了一下,但本着学习的精神还是百度了一下关

几个常用文本处理小工具tr ,wc,cut,sort,uniq用法详解

几个文本处理的小工具:tr ,wc,cut,sort,uniq 1. tr命令可以对来自标准输入的字符进行替换.压缩和删除.它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大. 语法:tr 选项  SET1 SET2 -c或--complerment:取代所有不属于第一字符集的字符(就是补集): -d或--delete:删除所有属于第一字符集的字符: -s或--squeeze-repeats:把连续重复的字符以单独一个字符表示: -t或--truncate-set1:先删除第

Android Studio添加Parcelable序列化小工具(快速提高开发效率)

Android Studio添加Parcelable序列化小工具(快速提高开发效率) Android Studio是google专门为开发Android提供的开发工具,在它内部可以直接的添加一些非常好用的开发小工具,这里就讲解怎样添加这些小工具,并且向大家推荐一个非常有用的对象传递时,必须要把对象序列化的接口Parcelable小工具; 这里先介绍下 Android中实现序列化的两个选择:一是实现Serializable接口(是JavaSE本身就支持的),一是实现Parcelable接口(是An