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 ...
随机推荐
- 【css学习整理】浮动,清除
css内边距属性: padding padding-top right bottom left 如果是两个数字,指的是上下,左右 padding: 10px 20px 上下10 左右20 如果是三 ...
- BZOJ 1191 [HNOI2006]超级英雄Hero:二分图匹配 匈牙利算法
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1191 题意: 有m道题,每答对一题才能接着回答下一个问题. 你一道题都不会,但是你有n个“ ...
- 手机移动端网站开发流程HTML5
手机移动端网站开发流程HTML5 最近一直在研究移动手机网站的开发,发现做手机网站没有想象中的那么难.为什么会这么说呢?我们试想下:我们连传统的PC网站都会做,难道连一个小小的手机网站难道都搞不定吗? ...
- OpenCv-Python 图像处理基本操作
1. 图片加载.显示和保存 import cv2 img = cv2.imread("01.jpg") imgGrey = cv2.imread("01.jpg" ...
- BZOJ1251 序列终结者(Splay平衡树)(占位)
网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技术含量…… ...
- 关于ng-class中添加多个样式类的解决方案
想要达到ng-class的效果,有两种写法 1.class=“{{class}} class1 class2” 2.ng-class="{true: 'active', false: 'in ...
- CodeForces - 123E Maze
http://codeforces.com/problemset/problem/123/E 题目翻译:(翻译来自: http://www.cogs.pw/cogs/problem/problem.p ...
- Java面试知识点总结(1)
1.Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么? 原始数据类型 大小(byte) 对应封装类型 boolean 1或4 Boolean byte 1 Byte short 2 S ...
- 用于获取或设置Web.config/*.exe.config中节点数据的辅助类
1. 用于获取或设置Web.config/*.exe.config中节点数据的辅助类 /**//// <summary> /// 用于获取或设置Web.config/*.exe.confi ...
- 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)
No valid host was found. There are not enough hosts available 'ascii' codec can't decode byte 0xe6 i ...