package LinkListPage;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class LinkFrame implements ActionListener ,Runnable{
// 框架的宽度和高度
private final int WIDTH = 500;
private final int HEIGHT = 550;
private int num = 0;
private int m = -1;
private int m2 = -1;
private int m3 = -1;
private int m4 = -1;
private int m5 = -1;
private String op;
JFrame jf;
JLabel jl1,jl2,jl3,jl4,jl5,jpoint,jpoint2,jnewNode,jdata;
JLabel jb1[]=new JLabel[12];
JLabel jb2[]=new JLabel[11];
JLabel jln[]=new JLabel[12];
JButton jy,jin,jinsert,jdelete,jsearch,jrst;
JTextField jt1,jt2,jt3,jt4,jt5;
JTextField jt[]=new JTextField[12];
JTextArea show;
ImageIcon data,point,point2,point3,data2;
LinkFrame() {
jf = new JFrame();
Container con = jf.getContentPane();
con.setLayout(null);
jf.setResizable(false);// 不可改变大小
jf.setTitle("链表");// 设置标题
jf.setSize(WIDTH, HEIGHT);// 设置界面大小
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);// 设置关闭窗口时的动作
Toolkit kit = Toolkit.getDefaultToolkit();
// 设置界面位置
Dimension screenSize = kit.getScreenSize();
int w = screenSize.width;
int h = screenSize.height;
int x = (w - WIDTH) / 2;
int y = (h - HEIGHT) / 2;
jf.setLocation(x, y);
data = new ImageIcon(this.getClass().getResource(
"data.png"));
data2 = new ImageIcon(this.getClass().getResource(
"data2.png"));
point = new ImageIcon(this.getClass().getResource(
"point.png"));
point2 = new ImageIcon(this.getClass().getResource(
"point2.png"));
point3 = new ImageIcon(this.getClass().getResource(
"point3.png"));
jl1=new JLabel("输入初始化的元素个数(0-12):");
jl1.setBounds(80,220,180,20);
jl2=new JLabel("输入要搜索的元素:");
jl2.setBounds(80,285,120,20);
jl3=new JLabel("输入要删除元素的位置:");
jl3.setBounds(80,315,150,20);
jl4=new JLabel("输入要插入的元素:");
jl4.setBounds(80,345,120,20);
jl5=new JLabel("输入要插入的元素的位置:");
jl5.setBounds(230,345,160,20);
jpoint=new JLabel();
jpoint2=new JLabel();
jnewNode=new JLabel();
jdata=new JLabel();
jt1=new JTextField();
jt1.setBounds(270,220,40,20);
jt2=new JTextField();
jt2.setBounds(200,285,40,20);
jt3=new JTextField();
jt3.setBounds(230,315,40,20);
jt4=new JTextField();
jt4.setBounds(190,345,30,20);
jt5=new JTextField();
jt5.setBounds(380,345,30,20);
jy=new JButton("确定");
jy.setBounds(330,220,90,20);
jy.addActionListener(this);// 按钮加入监听
jsearch=new JButton("搜索");
jsearch.setBounds(330,285,90,20);
jsearch.addActionListener(this);// 按钮加入监听
jdelete=new JButton("删除");
jdelete.setBounds(330,315,90,20);
jdelete.addActionListener(this);// 按钮加入监听
jinsert=new JButton("插入");
jinsert.setBounds(85,375,150,20);
jinsert.addActionListener(this);// 按钮加入监听
jrst=new JButton("重置");
jrst.setBounds(260,375,150,20);
jrst.addActionListener(this);// 按钮加入监听
jin=new JButton("初始化");
jin.setBounds(340,250,80,25);
jin.addActionListener(this);// 按钮加入监听
for(int i=0;i<12;i++){
jt[i]=new JTextField();
jt[i].setBounds(80+21*i,250,20,25);
}
for(int i=0;i<12;i++){
jb1[i]= new JLabel();
jb1[i].setBounds(43+36*i,95,18,50);
}
for(int i=0;i<11;i++){
jb2[i]= new JLabel();
jb2[i].setBounds(61+36*i,95,18,50);
}
for(int i=0;i<12;i++){
jln[i]= new JLabel();
jln[i].setBounds(43+36*i,120,18,25);
}
for(int i=0;i<12;i++){
jt[i]=new JTextField();
jt[i].setBounds(80+21*i,250,20,25);
}
for(int i=0;i<12;i++){
jf.add(jt[i]);
}
show=new JTextArea();
show.setEditable(false);
JScrollPane scrolledText = new JScrollPane(show);
scrolledText
.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);// 水平滚动条
scrolledText
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);// 竖直滚动条
scrolledText.setBounds(95,405,300,100);
for(int i=0;i<12;i++){
jf.add(jln[i]);
}
for(int i=0;i<12;i++){
jf.add(jb1[i]);
}
for(int i=0;i<11;i++){
jf.add(jb2[i]);
}
jf.add(jy);
jf.add(jdelete);
jf.add(jsearch);
jf.add(jinsert);
jf.add(jrst);
jf.add(jin);
jf.add(jl1);
jf.add(jl2);
jf.add(jl3);
jf.add(jl4);
jf.add(jl5);
jf.add(jpoint);
jf.add(jdata);
jf.add(jnewNode);
jf.add(jpoint2);
jf.add(jt1);
jf.add(jt2);
jf.add(jt3);
jf.add(jt4);
jf.add(jt5);
jf.add(scrolledText);
jf.setVisible(true);
}
public void sleep(boolean bo){
try {
Thread.sleep(1500);
} catch (Exception e) {
e.printStackTrace();
}
}
public void run(){
if(op.equals("search")){
String s=""+m2;
System.out.println(s);
int i=0;
while(i<num){
System.out.println(jln[i].getText());
if(!jln[i].getText().equals(s)){
jb1[i].setIcon(data2);
sleep(true);
jb1[i].setIcon(data);
i++;
}
else{
jb1[i].setIcon(data2);
show.append("找到元素"+m2+"\n");
sleep(true);
jb1[i].setIcon(data);
return;
}
}
show.append("没有找到元素"+m2+"\n");
}
if(op.equals("insert")){
if(m4==0){
show.append("新插入的节点作为头节点"+"\n");
for(int i=num-1;i>=0;i--){
jb1[i+1].setIcon(data);
if(i!=num-1)
jb2[i+1].setIcon(point);
jln[i+1].setText(jln[i].getText());
}
jb1[0].setIcon(null);
jb2[0].setIcon(null);
jln[0].setText(null);
sleep(true);
jb1[0].setIcon(data);
jb2[0].setIcon(point);
jln[0].setText(""+m5);
num++;
}
else if(m4==num){
show.append("在尾节点插入新节点"+"\n");
int i=0;
while(i<num){
jb1[i].setIcon(data2);
sleep(true);
jb1[i].setIcon(data);
i++;
}
jb1[num].setIcon(data);
jln[num].setText(""+m5);
sleep(true);
jb2[num-1].setIcon(point);
num++;
}
else if(m4<num&&m4>0){
show.append("插入新节点"+"\n");
int i=0;
while(i<m4){
jb1[i].setIcon(data2);
sleep(true);
jb1[i].setIcon(data);
i++;
}
sleep(true);
jnewNode.setIcon(data);
jnewNode.setBounds(61+36*(i-1),145,18,50);
jdata.setText(""+m5);
jdata.setBounds(61+36*(i-1),170,18,25);
jpoint2.setIcon(point3);
jpoint2.setBounds(61+36*(i-1)+18,145,18,50);
sleep(true);
sleep(true);
for(int g=num-1;g>=m4;g--){
jb1[g+1].setIcon(data);
if(g!=num-1)
jb2[g+1].setIcon(point);
jln[g+1].setText(jln[g].getText());
}
jb2[i-1].setIcon(null);
jnewNode.setIcon(null);
jdata.setText(null);
jpoint2.setIcon(null);
jb1[i].setIcon(data);
jb2[i].setIcon(point);
jln[i].setText(""+m5);
sleep(true);
jb2[i-1].setIcon(point);
num++;
}
}
if(op.equals("delete")){
if(m3==1){
show.append("删除头节点"+"\n");
for(int i=0;i<num-1;i++){
jb1[i].setIcon(null);
jb2[i].setIcon(null);
jln[i].setText(null);
jb1[i+1].setIcon(null);
jb2[i+1].setIcon(null);
jb1[i].setIcon(data);
if(i<num-2)
jb2[i].setIcon(point);