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 ...
随机推荐
- Spark- Spark Yarn模式下跑yarn-client无法初始化SparkConext,Over usage of virtual memory
在spark yarn模式下跑yarn-client时出现无法初始化SparkContext错误. // :: INFO mapreduce.Job: Task Id : attempt_142829 ...
- JAVA- 清除数组重复元素
清除数组重复元素并打印新数组. import java.util.*; public class Repeat { public static void main(String[] args) { / ...
- 夏日户外风景PSD素材
夏日户外风景PSD素材适用于向日葵素材背景图设计 地址:http://www.huiyi8.com/xiangrikui/
- JS 删除数组中指定的某个元素的方法
//首先创建函数方法 Array.prototype.indexOf = function(val){ for(var i=0;i<this.length;i++){ if(this[i] == ...
- python基础-大杂烩
random()随机函数 import random print(random.choice('abcdefghij')) #随机取这些字母 print(random.choice(['apple', ...
- hadoop集群的安装
Hadoop集群安装 1.配置JDK环境和设置主机名,本地解析 JDK环境教程: http://www.cnblogs.com/wangweiwen/p/6104189.html 本地解析: vim ...
- POJ3237 Tree(树剖+线段树+lazy标记)
You are given a tree with N nodes. The tree’s nodes are numbered 1 through N and its edges are numbe ...
- poj1475 Pushing Boxes[双重BFS(毒瘤搜索题)]
地址. 很重要的搜索题.★★★ 吐槽:算是写过的一道码量比较大的搜索题了,细节多,还比较毒瘤.虽然是一遍AC的,其实我提前偷了大数据,但是思路还是想了好长时间,照理说想了半小时出不来,我就会翻题解,但 ...
- 【C】字符串常量和字符数组
此次博客是转载某位博主的文章,不过现在找不到了,所以先声明一下. 先贴一段代码: #include <stdio.h> int main(int argc, const char** ar ...
- mac下配置xampp的vhost
1 先确定在httpd.conf文件(/Applications/XAMPP/xamppfiles/etc/httpd.conf)中,引入了vhosts.conf文件. 1.1 在httpd.conf ...