Swing 实现的Gui链表

https://gitee.com/dgwcode/MyJavaCode

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

java Swing 实现的链表类

  1 package M;
  2 
  3 import java.awt.BorderLayout;
  4 import java.awt.Container;
  5 import java.awt.Dimension;
  6 import java.awt.FlowLayout;
  7 import java.awt.Font;
  8 
  9 import javax.swing.JButton;
 10 import javax.swing.JFrame;
 11 import javax.swing.JOptionPane;
 12 import javax.swing.JPanel;
 13 import javax.swing.JScrollPane;
 14 import javax.swing.JSplitPane;
 15 import javax.swing.JTextArea;
 16 
 17 class Carriage { /// 车厢
 18     int size = 0;// 表示当前车厢已经装了几个活物
 19     char a[] = new char[4];/// a用来装货物
 20     Carriage next;/// 连接下一个
 21 }
 22 public class A {
 23 
 24     private static int FLAG = -1;
 25     private final static int WIDTH = 800;
 26     private final static int HEIGHT = 400;
 27     private static Container container;
 28     private static JPanel UpPanel;
 29     private static JPanel bottomPanel;
 30     private static JButton Input0;
 31     private static JButton Input1;
 32     private static JButton Input2;
 33     private static JTextArea viewArea;
 34     private static JScrollPane jspane1;
 35     private static JSplitPane jsp;
 36     static int size = 5;/// 最初的5个车厢
 37     static Carriage Head = new Carriage();/// 最开始的都头结点
 38 
 39     public static void init() {
 40         // TODO Auto-generated constructor stub
 41         Carriage p = Head;
 42         for (int i = 0; i < 5; i++) {
 43             Carriage r = new Carriage();
 44             p.next = r;//// 连接
 45             p = r;
 46         }
 47     }
 48 
 49     public static void main(String[] args) {
 50         init();
 51         InitFrame();
 52 
 53     }
 54 
 55     public static void Logic(int a, char car, int num) {
 56         if (a == 0) {
 57             //System.out.println("准备打印链表状态");
 58             viewArea.append("准备打印链表状态\n");
 59             for (int i = 0; i < size; i++) {
 60                 PrintCarUp();
 61                 //System.out.print("    ");
 62                 viewArea.append("    ");
 63             }
 64             //System.out.println();
 65             viewArea.append("\n");
 66             Carriage p = Head.next;
 67             while (p != null) {
 68                 //System.out.print("*");
 69                 viewArea.append("*");
 70                 for (int i = 0; i < 4; i++) {
 71                     if (p.a[i] == 0)
 72                         //System.out.print(" ");
 73                         viewArea.append(" ");
 74                     else
 75                         //System.out.print(p.a[i]);
 76                         viewArea.append(String.valueOf(p.a[i]));
 77                 }
 78                 //System.out.print("*");
 79                 viewArea.append("*");
 80                 showNext();
 81                 p = p.next;
 82             }
 83             //System.out.println();
 84             viewArea.append("\n");
 85             for (int i = 0; i < size; i++) {
 86                 PrintCarUp();
 87                 //System.out.print("    ");
 88                 viewArea.append("    ");
 89             }
 90             //System.out.println();
 91             viewArea.append("\n");
 92         } else if (a == 1) {
 93             //System.out.println("请输入两个数,第一个为字母,第二个数字,例如 A 2");
 94             viewArea.append("请输入两个数,第一个为字母,第二个数字,例如 A 2");
 95             while (num != 0) {
 96                 Carriage p = Head;
 97                 while (p.next != null) {
 98                     if (p.next.size == 4)
 99                         p = p.next;
100                     for (int i = 0; i < 4; i++) {
101                         if (p.next.a[i] == 0) {
102                             p.next.a[i] = car;
103                             p.next.size++;
104                             num--;
105                         }
106                         if (num == 0)
107                             break;
108                     }
109                     if (num == 0)
110                         break;
111                     p = p.next;
112                 }
113                 while (num != 0) {
114                     Carriage r = new Carriage();
115                     p.next = r;
116                     p = r;
117                     for (int i = 0; i < 4 && num != 0; i++) {
118                         r.a[i] = car;
119                         num--;
120                     }
121                 }
122             }
123         } else {
124             //System.out.println("请输入一个字母,例如 A");
125             viewArea.append("请输入一个字母,例如 A");
126             Carriage p = Head;
127             int num1 = 0;
128             while (p.next != null) {
129                 for (int i = 0; i < 4; i++) {
130                     if (p.next.a[i] == car) {
131                         p.next.a[i] = 0;
132                         num1++;
133                     }
134                 }
135                 if (num1 == 4) {
136                     Carriage r = p.next;
137                     p.next = r.next;
138                     r.next = null;/// 回收利用
139                     size--;
140                 } else {
141                     p = p.next;
142                 }
143                 num1 = 0;
144             }
145         }
146     }
147 
148     private static void InitFrame() {
149         JFrame Main = new JFrame("Carriage");
150         container = Main.getContentPane();
151         container.setLayout(new BorderLayout());
152         Main.setSize(WIDTH, HEIGHT);
153         Main.setLocationRelativeTo(null);
154         Main.setLayout(new BorderLayout());
155         Main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
156 
157         Input0 = new JButton("打印链表状态0");
158         Input1 = new JButton("装货1");
159         Input2 = new JButton("卸货2");
160         UpPanel = new JPanel(new FlowLayout());
161         bottomPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
162         viewArea = new JTextArea("选择按钮 0,1,2,输入-1退出");
163         viewArea.setLineWrap(true);
164         viewArea.setFont(new Font("黑体", Font.BOLD, 15));
165         jspane1 = new JScrollPane(viewArea) {
166             private static final long serialVersionUID = 1L;
167 
168             @Override
169             public Dimension getPreferredSize() {
170                 return new Dimension(780, 280);
171             }
172 
173             @Override
174             public Font getFont() {
175                 return new Font("黑体", Font.BOLD, 12);
176             }
177         };
178 
179         UpPanel.setSize(WIDTH, 150);
180         bottomPanel.setSize(WIDTH, 250);
181 
182         UpPanel.add(Input0);
183         UpPanel.add(Input1);
184         UpPanel.add(Input2);
185 
186         bottomPanel.add(jspane1);
187 
188         jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, UpPanel, bottomPanel);
189         jsp.setDividerLocation(70); // 设置拆分窗格分频器初始位置
190         jsp.setDividerSize(1); // 设置分频器大小
191         container.add(jsp);
192         // button lisenner
193         Input0.addActionListener(e -> {
194             FLAG=0;
195             Logic(FLAG, '0', 0);
196         });
197         Input1.addActionListener(e -> {
198             String inputValue = JOptionPane.showInputDialog("请输入两个数,第一个为字母,第二个数字,例如 A 2(注意空格)");
199             // System.out.println("请输入两个数,第一个为字母,第二个数字,例如 A 2");
200             if (inputValue.equals(" ") || inputValue == null) {
201 
202             } else {
203                 char car = inputValue.charAt(0);
204                 int num = inputValue.charAt(2) - '0';
205                 FLAG=1;
206                 Logic(FLAG, car, num);
207                 // System.out.println(car+" "+num);
208             }
209         });
210         Input2.addActionListener(e -> {
211             String inputValue = JOptionPane.showInputDialog("请输入一个字母,例如 A");
212             if (inputValue.equals(" ") || inputValue == null) {
213 
214             } else {
215                 char car = inputValue.charAt(0);
216                 FLAG=2;
217                 Logic(FLAG, car, 0);
218                 // System.out.println(car+" "+num);
219             }
220 
221         });
222 
223         Main.setVisible(true);
224     }
225 
226     private static void PrintCarUp() {
227         //System.out.print("******");
228         viewArea.append("******");
229     }
230 
231     private static void PrintCarleft() {
232         //System.out.print("*");
233         viewArea.append("*");
234     }
235 
236     private static void PrintCarright() {
237         //System.out.print("*");
238         viewArea.append("*");
239     }
240 
241     private static void PrintCardown() {
242         //System.out.print("******");
243         viewArea.append("******");
244     }
245 
246     private static void showNext() {
247         //System.out.print("--->");
248         viewArea.append("--->");
249     }
250 
251     private static void print() {
252         //System.out.println("请输入0 1 2 或者-1退出");
253         viewArea.append("请输入0 1 2 或者-1退出");
254         show();
255     }
256     public static void show() {
257         //System.out.println("0-打印链表状态");
258         //System.out.println("1-装货");
259         //System.out.println("2-卸货");
260         viewArea.append("0-打印链表状态");
261         viewArea.append("1-装货");
262         viewArea.append("2-卸货");
263     }
264 }

猜你喜欢

转载自www.cnblogs.com/dgwblog/p/11008817.html