基本的按钮动作监听
多个同样的文本域可以用数组做。
package disvec;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.util.*;
public class Main extends JFrame implements ActionListener, FocusListener {
int[][] dist;
int[][] jmp;
final int NN=9;
int [][] map;
JPanel picPanel;
JTextArea listA;
JTextArea listB;
JTextArea listC;
JTextArea listD;
JTextArea listE;
JTextArea listF;
JTextArea listG;
JTextArea listH;
JPanel A;
JPanel B;
JPanel C;
JPanel D;
JPanel E;
JPanel F;
JPanel G;
JPanel H;
JLabel pic ;
JButton next;
final int n=8;
final int oo=1000000010;
int[][] olddist,oldjmp;
public void initArray(){
olddist=new int[NN][NN];
oldjmp=new int[NN][NN];
map = new int[][]{
{oo,oo,oo,oo,oo,oo,oo,oo,oo},
{oo,0,2,oo,oo,oo,oo,6,oo},
{oo,2,0,7,oo,2,oo,oo,oo},
{oo,oo,7,0,3,oo,3,oo,oo},
{oo,oo,oo,4,0,oo,oo,oo,2},
{oo,oo,2,oo,oo,0,2,1,oo},
{oo,oo,oo,3,oo,2,0,oo,2},
{oo,6,oo,oo,oo,1,oo,0,4},
{oo,oo,oo,oo,2,oo,2,4,0}
};
dist= new int[NN][NN];
jmp=new int[NN][NN];
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){
dist[i][j]=map[i][j];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(dist[i][j]<oo)jmp[i][j]=j;
else jmp[i][j]=-1;
}
}
}
public void initPicPanel(){
picPanel =new JPanel();
picPanel.setPreferredSize(new Dimension(1100, 200));
picPanel.setBackground(Color.white);
picPanel.setBorder(BorderFactory.createTitledBorder("Map"));
picPanel.add(pic);
}
public void initTexField(){
listA=new JTextArea();
listB=new JTextArea();
listC=new JTextArea();
listD=new JTextArea();
listE=new JTextArea();
listF=new JTextArea();
listG=new JTextArea();
listH=new JTextArea();
A=new JPanel();
B=new JPanel();
C=new JPanel();
D=new JPanel();
E=new JPanel();
F=new JPanel();
G=new JPanel();
H=new JPanel();
A.setPreferredSize(new Dimension(135, 300));
A.setBackground(Color.white);
A.setBorder(BorderFactory.createTitledBorder("listA"));
A.add(listA);
B.setPreferredSize(new Dimension(135, 300));
B.setBackground(Color.white);
B.setBorder(BorderFactory.createTitledBorder("listB"));
B.add(listB);
C.setPreferredSize(new Dimension(135, 300));
C.setBackground(Color.white);
C.setBorder(BorderFactory.createTitledBorder("listC"));
C.add(listC);
D.setPreferredSize(new Dimension(135, 300));
D.setBackground(Color.white);
D.setBorder(BorderFactory.createTitledBorder("listD"));
D.add(listD);
E.setPreferredSize(new Dimension(135, 300));
E.setBackground(Color.white);
E.setBorder(BorderFactory.createTitledBorder("listE"));
E.add(listE);
F.setPreferredSize(new Dimension(135, 300));
F.setBackground(Color.white);
F.setBorder(BorderFactory.createTitledBorder("listF"));
F.add(listF);
G.setPreferredSize(new Dimension(135, 300));
G.setBackground(Color.white);
G.setBorder(BorderFactory.createTitledBorder("listG"));
G.add(listG);
H.setPreferredSize(new Dimension(135, 300));
H.setBackground(Color.white);
H.setBorder(BorderFactory.createTitledBorder("listH"));
H.add(listH);
}
public void initButton(){
next=new JButton("next time");
next.addActionListener(this);
}
public void makeFrame(){
this.setTitle("Distance Vector Routing");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new FlowLayout());
this.add(picPanel);
this.add(A);
this.add(B);
this.add(C);
this.add(D);
this.add(E);
this.add(F);
this.add(G);
this.add(H);
this.add(next);
this.setVisible(true);
this.setSize(1200,600);
}
void BellmanFord(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
olddist[i][j]=dist[i][j];
oldjmp[i][j]=jmp[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(j==i)continue;
if(map[i][j]<oo){
for(int k=1;k<=8;k++){
if(olddist[j][k]<oo){
if(olddist[i][k]>=oo){//i表没有项目k
dist[i][k]=olddist[j][k]+map[i][j];
jmp[i][k]=j;
}
else{
if(oldjmp[i][k]!=j){
if(olddist[j][k]+map[i][j]<olddist[i][k]){
dist[i][k]=olddist[j][k]+map[i][j];
jmp[i][k]=j;
}
}
else{
dist[i][k]=olddist[i][j]+olddist[j][k];
}
}
}
}
}
}
}
}
public void display(){
listA.setText("");
for(int i=1;i<=n;i++){
char cc= (char) ('A'+i-1);
char cc2= (char) ('A'+jmp[1][i]-1);
if(i==1||dist[1][i]>=oo)listA.append(cc+" "+"N"+" "+"/"+"\n");
else listA.append(cc+" "+dist[1][i]+" "+cc2+"\n");
}
listB.setText("");
for(int i=1;i<=n;i++){
char cc= (char) ('A'+i-1);
char cc2= (char) ('A'+jmp[2][i]-1);
if(i==2||dist[2][i]>=oo)listB.append(cc+" "+"N"+" "+"/"+"\n");
else listB.append(cc+" "+dist[2][i]+" "+cc2+"\n");
}
listC.setText("");
for(int i=1;i<=n;i++){
char cc= (char) ('A'+i-1);
char cc2= (char) ('A'+jmp[3][i]-1);
if(i==3||dist[3][i]>=oo)listC.append(cc+" "+"N"+" "+"/"+"\n");
else listC.append(cc+" "+dist[3][i]+" "+cc2+"\n");
}
listD.setText("");
for(int i=1;i<=n;i++){
char cc= (char) ('A'+i-1);
char cc2= (char) ('A'+jmp[4][i]-1);
if(i==4||dist[4][i]>=oo)listD.append(cc+" "+"N"+" "+"/"+"\n");
else listD.append(cc+" "+dist[4][i]+" "+cc2+"\n");
}
listE.setText("");
for(int i=1;i<=n;i++){
char cc= (char) ('A'+i-1);
char cc2= (char) ('A'+jmp[5][i]-1);
if(i==5||dist[5][i]>=oo)listE.append(cc+" "+"N"+" "+"/"+"\n");
else listE.append(cc+" "+dist[5][i]+" "+cc2+"\n");
}
listF.setText("");
for(int i=1;i<=n;i++){
char cc= (char) ('A'+i-1);
char cc2= (char) ('A'+jmp[6][i]-1);
if(i==6||dist[6][i]>=oo)listF.append(cc+" "+"N"+" "+"/"+"\n");
else listF.append(cc+" "+dist[6][i]+" "+cc2+"\n");
}
listG.setText("");
for(int i=1;i<=n;i++){
char cc= (char) ('A'+i-1);
char cc2= (char) ('A'+jmp[7][i]-1);
if(i==7||dist[7][i]>=oo)listG.append(cc+" "+"N"+" "+"/"+"\n");
else listG.append(cc+" "+dist[7][i]+" "+cc2+"\n");
}
listH.setText("");
for(int i=1;i<=n;i++){
char cc= (char) ('A'+i-1);
char cc2= (char) ('A'+jmp[8][i]-1);
if(i==8||dist[8][i]>=oo)listH.append(cc+" "+"N"+" "+"/"+"\n");
else listH.append(cc+" "+dist[8][i]+" "+cc2+"\n");
}
}
public Main(){
pic = new JLabel(new ImageIcon("D:\\disVec\\src\\disvec\\图片1.png"));
initArray();
initPicPanel();
initTexField();
initButton();
makeFrame();
display();
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==next){
BellmanFord();
display();
}
}
public void focusGained(FocusEvent e) {
;
}
public void focusLost(FocusEvent e) {
;
}
public static void main(String[] args) {
new Main();
}
}
效果


本文详细介绍了一种基于Java Swing的图形用户界面实现距离矢量路由算法的过程。通过按钮动作监听,更新并显示每次迭代后的距离矩阵和下一跳节点,实现了动态展示距离矢量路由算法的运行过程。
1556

被折叠的 条评论
为什么被折叠?



