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 ...
随机推荐
- RTSP协议
1.RTSP与几个相关协议 RTSP(Real Time Streaming Protocol)实时流协议,是用来控制声音或影像的多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通 ...
- dmidecode 命令
dmidecode # 查看全面硬件信息dmidecode | grep "Product ...
- MySQL记录_20160919
1.首先先看下什么是MySQL. MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 最流行的关系型数据库管理系统,其开放源码这一特点 ...
- BZOJ_4987_Tree_树形DP
BZOJ_4987_Tree_树形DP Description 从前有棵树. 找出K个点A1,A2,…,Ak. 使得∑dis(AiAi+1),(1<=i<=K-1)最小. Input 第一 ...
- 洛谷【P3437】[POI2006]TET-Tetris 3D
浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 浅谈标记永久化:https://www.cnblogs.com/AKMer/p/1013 ...
- WPF ListView VisualPanel
<ItemsPanelTemplate x:Key="ItemsPanelTemplate1"> &l ...
- maven+eclpse+jmeter+jenkis
1.maven配置:http://www.cnblogs.com/AlanLee/p/6133189.html 2.在eclipse中创建maven项目:https://jingyan.baidu.c ...
- QT画矩形
第一次发QT的博文,本人对QT接触没多久,还在入门水平,大牛勿喷哈,之前因为C# (.net framework)做出来的绘制矩形的程序闪的太厉害了,现在用QT重做一个 先上效果图 代码贴全了 #i ...
- <正则吃饺子> :关于 Matcher 的 replaceAll 的简单使用
在线文档地址:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh replaceAll public String replaceAll(String ...
- 使用Spring的jdbcTemplate进一步简…
先看applicationContext.xml配置文件: 版权声明:本文为博主原创文章,未经博主允许不得转载.