Swing 实现的Gui链表
https://gitee.com/dgwcode/MyJavaCode

-Freight类可以实现的功能
·构造方法:初始空车厢有5个
·装货:当运往某地点的货物大于等于4个的时候,如果有空车箱,则先占用整个空车厢,如果没有空车厢,则在尾部新增一个车厢节点,存放货物(假设不存在超过7个的情况),并且从链表头部依次搜索是否有车厢还有空位,如果有,将多出来的零散货物分别装进车厢(如上图的5件B,先装满第二个车厢,然后搜索后再将剩余的一件装入第一车厢)
·卸货:当到达某地时,以B为例,搜索链表,如果某个车厢都是该地货物,则从链表中删除此节点,并将其他零散B地货物从车厢中去除。
java Swing 实现的链表类

package M; import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea; class Carriage { /// 车厢
int size = 0;// 表示当前车厢已经装了几个活物
char a[] = new char[4];/// a用来装货物
Carriage next;/// 连接下一个
}
public class A { private static int FLAG = -1;
private final static int WIDTH = 800;
private final static int HEIGHT = 400;
private static Container container;
private static JPanel UpPanel;
private static JPanel bottomPanel;
private static JButton Input0;
private static JButton Input1;
private static JButton Input2;
private static JTextArea viewArea;
private static JScrollPane jspane1;
private static JSplitPane jsp;
static int size = 5;/// 最初的5个车厢
static Carriage Head = new Carriage();/// 最开始的都头结点 public static void init() {
// TODO Auto-generated constructor stub
Carriage p = Head;
for (int i = 0; i < 5; i++) {
Carriage r = new Carriage();
p.next = r;//// 连接
p = r;
}
} public static void main(String[] args) {
init();
InitFrame(); } public static void Logic(int a, char car, int num) {
if (a == 0) {
//System.out.println("准备打印链表状态");
viewArea.append("准备打印链表状态\n");
for (int i = 0; i < size; i++) {
PrintCarUp();
//System.out.print(" ");
viewArea.append(" ");
}
//System.out.println();
viewArea.append("\n");
Carriage p = Head.next;
while (p != null) {
//System.out.print("*");
viewArea.append("*");
for (int i = 0; i < 4; i++) {
if (p.a[i] == 0)
//System.out.print(" ");
viewArea.append(" ");
else
//System.out.print(p.a[i]);
viewArea.append(String.valueOf(p.a[i]));
}
//System.out.print("*");
viewArea.append("*");
showNext();
p = p.next;
}
//System.out.println();
viewArea.append("\n");
for (int i = 0; i < size; i++) {
PrintCarUp();
//System.out.print(" ");
viewArea.append(" ");
}
//System.out.println();
viewArea.append("\n");
} else if (a == 1) {
//System.out.println("请输入两个数,第一个为字母,第二个数字,例如 A 2");
viewArea.append("请输入两个数,第一个为字母,第二个数字,例如 A 2");
while (num != 0) {
Carriage p = Head;
while (p.next != null) {
if (p.next.size == 4)
p = p.next;
for (int i = 0; i < 4; i++) {
if (p.next.a[i] == 0) {
p.next.a[i] = car;
p.next.size++;
num--;
}
if (num == 0)
break;
}
if (num == 0)
break;
p = p.next;
}
while (num != 0) {
Carriage r = new Carriage();
p.next = r;
p = r;
for (int i = 0; i < 4 && num != 0; i++) {
r.a[i] = car;
num--;
}
}
}
} else {
//System.out.println("请输入一个字母,例如 A");
viewArea.append("请输入一个字母,例如 A");
Carriage p = Head;
int num1 = 0;
while (p.next != null) {
for (int i = 0; i < 4; i++) {
if (p.next.a[i] == car) {
p.next.a[i] = 0;
num1++;
}
}
if (num1 == 4) {
Carriage r = p.next;
p.next = r.next;
r.next = null;/// 回收利用
size--;
} else {
p = p.next;
}
num1 = 0;
}
}
} private static void InitFrame() {
JFrame Main = new JFrame("Carriage");
container = Main.getContentPane();
container.setLayout(new BorderLayout());
Main.setSize(WIDTH, HEIGHT);
Main.setLocationRelativeTo(null);
Main.setLayout(new BorderLayout());
Main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Input0 = new JButton("打印链表状态0");
Input1 = new JButton("装货1");
Input2 = new JButton("卸货2");
UpPanel = new JPanel(new FlowLayout());
bottomPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
viewArea = new JTextArea("选择按钮 0,1,2,输入-1退出");
viewArea.setLineWrap(true);
viewArea.setFont(new Font("黑体", Font.BOLD, 15));
jspane1 = new JScrollPane(viewArea) {
private static final long serialVersionUID = 1L; @Override
public Dimension getPreferredSize() {
return new Dimension(780, 280);
} @Override
public Font getFont() {
return new Font("黑体", Font.BOLD, 12);
}
}; UpPanel.setSize(WIDTH, 150);
bottomPanel.setSize(WIDTH, 250); UpPanel.add(Input0);
UpPanel.add(Input1);
UpPanel.add(Input2); bottomPanel.add(jspane1); jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, UpPanel, bottomPanel);
jsp.setDividerLocation(70); // 设置拆分窗格分频器初始位置
jsp.setDividerSize(1); // 设置分频器大小
container.add(jsp);
// button lisenner
Input0.addActionListener(e -> {
FLAG=0;
Logic(FLAG, '0', 0);
});
Input1.addActionListener(e -> {
String inputValue = JOptionPane.showInputDialog("请输入两个数,第一个为字母,第二个数字,例如 A 2(注意空格)");
// System.out.println("请输入两个数,第一个为字母,第二个数字,例如 A 2");
if (inputValue.equals(" ") || inputValue == null) { } else {
char car = inputValue.charAt(0);
int num = inputValue.charAt(2) - '0';
FLAG=1;
Logic(FLAG, car, num);
// System.out.println(car+" "+num);
}
});
Input2.addActionListener(e -> {
String inputValue = JOptionPane.showInputDialog("请输入一个字母,例如 A");
if (inputValue.equals(" ") || inputValue == null) { } else {
char car = inputValue.charAt(0);
FLAG=2;
Logic(FLAG, car, 0);
// System.out.println(car+" "+num);
} }); Main.setVisible(true);
} private static void PrintCarUp() {
//System.out.print("******");
viewArea.append("******");
} private static void PrintCarleft() {
//System.out.print("*");
viewArea.append("*");
} private static void PrintCarright() {
//System.out.print("*");
viewArea.append("*");
} private static void PrintCardown() {
//System.out.print("******");
viewArea.append("******");
} private static void showNext() {
//System.out.print("--->");
viewArea.append("--->");
} private static void print() {
//System.out.println("请输入0 1 2 或者-1退出");
viewArea.append("请输入0 1 2 或者-1退出");
show();
}
public static void show() {
//System.out.println("0-打印链表状态");
//System.out.println("1-装货");
//System.out.println("2-卸货");
viewArea.append("0-打印链表状态");
viewArea.append("1-装货");
viewArea.append("2-卸货");
}
}
Swing 实现的Gui链表的更多相关文章
- 转载:开发者眼中最好的 22 款 GUI 测试工具
对于很多同学来说gui程序的测试是一个难点,所以我从网上转载了一篇关于gui测试的一篇文章,里面罗列的很多工具,大家可以尝试一下学习学习. 英文原文:22 best GUI testing tools ...
- 开发者眼中最好的 22 款 GUI 测试工具
1.Abbot - Java GUI 测试框架 Abbot是一个基于GUI的简单的Java测试框架,它能够帮助开发者测试Java用户界面. 它提供事件自动生成和验证Java GUI组件,使您能够轻松地 ...
- Java Swing 使用总结(转载)
随笔转载自:此去经年ぢ 地址:http://www.cnblogs.com/FLFL/p/5369756.html 1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在 ...
- swing的第一课
Swing介绍 Swing API 可扩展 GUI组件,以减轻开发者的生活创造基于JAVA前端/GUI应用.它是建立在AWT API之上,并作为 AWTAPI 的更换,因为它几乎每一个控制对应 AWT ...
- Swing多线程编程(转)
关键字: Swing,多线程,GUI,SwingWorker 摘要: 本文论述了怎样开发多线程的Swing程序,从而提高Swing程序的响应速度和性能. 近期,我将推出一系列研究Swing程序 ...
- java Gui编程 事件监听机制
1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式: 1. 命令交互方式 图书管理系统 ...
- Java程序设计11——GUI设计与事件处理A
1.GUI设计 Java使用AWT和Swing类完成图形用户界面编程,AWT全称是Abstract Window Toolkit,即抽象窗口工具集,它是Sun最早提供的GUI库,只是这个库功能比较有限 ...
- JAVA面试题最全集
JAVA面试题最全集 2009-01-19 15:40 3458人阅读 评论(0) 收藏 举报 java面试ejbservletstringhashmap 一.Java基础知识1.Java有那些基 ...
- Java程序员面试题收集(3)
面试中被问到过的题目: 1.<%@ include=""/>和<jsp:include page="" flush="true&qu ...
随机推荐
- python的上下文管理器
直接上代码: f = open('123.txt','w') try: f.write('hello world') except Exception: pass finally: f.close() ...
- BZOJ 1626 [Usaco2007 Dec]Building Roads 修建道路:kruskal(最小生成树)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1626 题意: 有n个农场,坐标为(x[i],y[i]). 有m条原先就修好的路,连接农场( ...
- Apache-SimpleEmail 简单应用
比JavaMail使用方法要直接,jar包只需要在JavaMail的基础上添加commons-email-1.4.jar即可. 代码: // QQ邮箱发送邮件 SimpleEmail simpleEm ...
- 3D Flip
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- java-05 面向对象
class StudentDemo { String name; int age; String address; public void study(){ System.out.println(&q ...
- mongdb启动问题
问题:Detected unclean shutdown - /data/db/mongod.lock is not empty. old lock file:/data/db/mongod.lock ...
- bzoj 4503 两个串 快速傅里叶变换FFT
题目大意: 给定两个\((length \leq 10^5)\)的字符串,问第二个串在第一个串中出现了多少次.并且第二个串中含有单字符通配符. 题解: 首先我们从kmp的角度去考虑 这道题从字符串数据 ...
- AI-Info-Micron-Insight:在线购物算法的核心是强大的 DRAM
ylbtech-AI-Info-Micron-Insight:在线购物算法的核心是强大的 DRAM 1.返回顶部 1. 在线购物算法的核心是强大的 DRAM 网购已成为标准程序.你滚动浏览各种服装页面 ...
- Python中datetime的使用和常用时间处理
datetime在python中比较常用,主要用来处理时间日期,使用前先倒入datetime模块.下面总结下本人想到的几个常用功能. 1.当前时间: >>> print dateti ...
- Rsync的配置与使用
一.介绍 (不想看直接可以跳过) Rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync本来是用以取代rcp的一个工具,它当前由 rsync.samba.org维护 ...