使用java编写代码形成GUI界面,该界面替代XCOM的功能 要求:GUI 界面需要有发送窗口显示发送的学号,有接收窗口显示接收到的湿度值,GUI 界面上需要有串口选择和串口打开关闭功能。
时间: 2024-10-07 13:01:12 浏览: 32
在Java中构建这样一个GUI界面,我们需要使用`javax.swing`或`javafx`,结合`javax.comm`库来控制串口通信。这是一个基本的概念示例,假设我们使用Swing:
```java
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.comm.*;
public class XComGUI {
private JList<String> portsList; // 串口列表
private JTextField studentIDField; // 发送学号的字段
private JTextArea humidityArea; // 接收湿度值的文本区
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
new XComGUI().setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public XComGUI() throws Exception {
// 初始化界面
JFrame frame = new JFrame("XCOM模拟");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
// 添加串口列表
portsList = new JList<>();
portsList.setModel(CommPortManager.getPortNamesListModel());
portsList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
// 当串口号选中,尝试打开串口
String selectedPort = (String) portsList.getSelectedValue();
openSerialPort(selectedPort);
}
});
// 其他控件添加...
frame.getContentPane().add(panel);
}
private void openSerialPort(String portName) {
if (!portName.isEmpty()) {
try {
CommPortIdentifier identifier = CommPortIdentifier.getPortIdentifier(portName);
CommPort commPort = identifier.open("XComGUI", 2000); // 2秒超时
if (commPort != null) {
SerialPort serialPort = (SerialPort) commPort;
// 开始监听并更新接收窗口
Thread readThread = new Thread(() -> updateHumidity(serialPort));
readThread.start();
} else {
JOptionPane.showMessageDialog(frame, "无法打开串口!");
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
private void updateHumidity(SerialPort serialPort) {
DataInputStream in = new DataInputStream(serialPort.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
humidityArea.append(line + "\n"); // 更新接收信息
}
}
}
阅读全文