00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 package boyermooredemo;
00026
00027 import java.awt.Color;
00028 import java.awt.Component;
00029 import java.awt.Dimension;
00030 import java.awt.Font;
00031 import java.awt.Rectangle;
00032
00033 import java.awt.event.MouseAdapter;
00034 import java.awt.event.MouseEvent;
00035
00036 import java.util.ArrayList;
00037 import java.util.ListIterator;
00038
00039 import javax.swing.BorderFactory;
00040 import javax.swing.JApplet;
00041 import javax.swing.JButton;
00042 import javax.swing.JLabel;
00043 import javax.swing.JOptionPane;
00044 import javax.swing.JScrollPane;
00045 import javax.swing.JTextArea;
00046 import javax.swing.JTextField;
00047 import javax.swing.SwingConstants;
00048
00049
00050
00051
00052
00053
00054 public class AppletBoyerMooreDemo extends JApplet {
00055
00056
00057
00058
00059 public Konstanty kon = new Konstanty();
00060
00061
00062
00063 private Algoritmus algBMA = new Algoritmus(this);
00064
00065
00066 private int aktKrok = 0;
00067
00068 public int pocetKroku = 0;
00069
00070
00071
00072 public ArrayList<ZmenaZobrazeni> prubehViz = new ArrayList<ZmenaZobrazeni>();
00073
00074
00075
00076
00077 public ListIterator iteratorViz;
00078
00079
00080 private int zobrazenaNapoveda = 0;
00081
00082
00083
00084
00085
00086 private int zobrazenyBlokAlgoritmu = 0;
00087
00088 private int zvyraznenyRadek = kon.ZADNY_RADEK;
00089
00090
00091 private JLabel jLabelNadpis = new JLabel();
00092
00093
00094 private JLabel jLabelHledanyRetezec = new JLabel();
00095
00096 private JTextField jTextFieldHledanyRetezec = new JTextField();
00097
00098
00099 private JLabel jLabelProhledavanyText = new JLabel();
00100
00101 private JTextArea jTextAreaProhledavanyText = new JTextArea();
00102
00103 private JScrollPane jScrollPaneProhledavanyText = new JScrollPane();
00104
00105
00106 private JLabel jLabelAlgoritmus = new JLabel();
00107
00108 private BarevnyTextPane barevnyTextPaneAlgoritmus = new BarevnyTextPane();
00109
00110 private JScrollPane jScrollPaneAlgoritmus = new JScrollPane();
00111
00112
00113 private Tabulka tabulkaSR = new Tabulka(kon.TAB_SR_VR[0],kon.TAB_SR_VR[1],
00114 0,2,new Color(255,255,255),
00115 new Color(0,0,0), false, false);
00116
00117 private JScrollPane jScrollPaneTabulkaSR = new JScrollPane();
00118
00119
00120 private JLabel jLabelTabulkaDelta1 = new JLabel();
00121
00122 private Tabulka tabulkaDelta1 = new Tabulka(kon.TAB_D1_VR[0],kon.TAB_D1_VR[1],
00123 1,4,new Color(255,255,255),
00124 new Color(0,0,0), true, true);
00125
00126 private JScrollPane jScrollPaneTabulkaDelta1 = new JScrollPane();
00127
00128
00129 private JLabel jLabelTabulkaDelta2 = new JLabel();
00130
00131 private Tabulka tabulkaDelta2 = new Tabulka(kon.TAB_D2_VR[0],kon.TAB_D2_VR[1],
00132 1,4,new Color(255,255,255),
00133 new Color(0,0,0), true, false);
00134
00135 private JScrollPane jScrollPaneTabulkaDelta2 = new JScrollPane();
00136
00137
00138 private JButton jButtonZpet = new JButton();
00139
00140 private JButton jButtonVpred = new JButton();
00141
00142 private JButton jButtonReset = new JButton();
00143
00144
00145 private JLabel jLabelNapoveda = new JLabel();
00146
00147 private JTextArea jTextAreaNapoveda = new JTextArea();
00148
00149 private JScrollPane jScrollPaneNapoveda = new JScrollPane();
00150
00151
00152 private JLabel jLabelm = new JLabel();
00153
00154 private JTextField jTextFieldm = new JTextField();
00155
00156
00157 private JLabel jLabeln = new JLabel();
00158
00159 private JTextField jTextFieldn = new JTextField();
00160
00161
00162 private JLabel jLabeli = new JLabel();
00163
00164 private JTextField jTextFieldi = new JTextField();
00165
00166
00167 private JLabel jLabelj = new JLabel();
00168
00169 private JTextField jTextFieldj = new JTextField();
00170
00171
00172 private JLabel jLabelmj = new JLabel();
00173
00174 private JTextField jTextFieldmj = new JTextField();
00175
00176
00177 private JLabel jLabelij = new JLabel();
00178
00179 private JTextField jTextFieldij = new JTextField();
00180
00181
00182 private JLabel jLabels = new JLabel();
00183
00184 private JTextField jTextFields = new JTextField();
00185
00186
00187 private JLabel jLabelt = new JLabel();
00188
00189 private JTextField jTextFieldt = new JTextField();
00190
00191
00192 private JLabel jLabelL = new JLabel();
00193
00194 private JTextField jTextFieldL = new JTextField();
00195
00196
00197 private JLabel jLabelpoz = new JLabel();
00198
00199 private JTextField jTextFieldpoz = new JTextField();
00200
00201
00202 private JLabel jLabelPocitadloKroku = new JLabel();
00203
00204
00205 private JLabel jLabelLegenda = new JLabel();
00206
00207 private JTextField jTextFieldLegendaZvyrazneny = new JTextField();
00208
00209 private JLabel jLabel1LegendaZvyrazneny = new JLabel();
00210
00211
00212
00213
00214
00215 public AppletBoyerMooreDemo()
00216 {
00217 }
00218
00219
00220
00221
00222
00223
00224 private void jbInit() throws Exception {
00225
00226 this.getContentPane().setLayout(null);
00227
00228 this.setSize(new Dimension(944, 651));
00229 this.setFont(new Font("Dialog", 1, 12));
00230
00231
00232
00233 jLabelNadpis.setText("Demonstrace Boyerova-Mooreova algoritmu");
00234 jLabelNadpis.setToolTipText("null");
00235 jLabelNadpis.setFont(new Font("Dialog", 1, 14));
00236 jLabelNadpis.setBounds(new Rectangle(20, 10, 385, 15));
00237 jLabelHledanyRetezec.setText("Hledaný řetězec:");
00238 jLabelHledanyRetezec.setBounds(new Rectangle(20, 35, 110, 20));
00239 jLabelHledanyRetezec.setLabelFor(jTextFieldHledanyRetezec);
00240 jTextFieldHledanyRetezec.setBounds(new Rectangle(130, 35, 305, 20));
00241 jLabelProhledavanyText.setText("Prohledávaný text:");
00242 jLabelProhledavanyText.setBounds(new Rectangle(20, 60, 120, 20));
00243 jScrollPaneProhledavanyText.setBounds(new Rectangle(20, 80, 415, 65));
00244 jTextAreaProhledavanyText.setColumns(20);
00245 jTextAreaProhledavanyText.setRows(4);
00246 jScrollPaneAlgoritmus.setBounds(new Rectangle(450, 25, 475, 565));
00247 jLabelAlgoritmus.setText("Algoritmus:");
00248 jLabelAlgoritmus.setBounds(new Rectangle(450, 5, 135, 20));
00249 jScrollPaneTabulkaSR.setBounds(new Rectangle(20, 155, 415, 65));
00250 jScrollPaneTabulkaDelta1.setBounds(new Rectangle(20, 245, 415, 75));
00251 jScrollPaneTabulkaDelta2.setBounds(new Rectangle(20, 345, 415, 120));
00252 jLabelTabulkaDelta1.setText("Tabulka delta1 (CharJump):");
00253 jLabelTabulkaDelta2.setText("Tabulka delta2 (MatchJump):");
00254 jLabelTabulkaDelta1.setBounds(new Rectangle(20, 225, 225, 20));
00255 jLabelTabulkaDelta2.setBounds(new Rectangle(20, 325, 225, 20));
00256 jButtonZpet.setText("Zpět");
00257 jButtonZpet.setBounds(new Rectangle(25, 525, 70, 25));
00258 jButtonVpred.setText("Vpřed");
00259 jButtonVpred.setBounds(new Rectangle(110, 525, 70, 25));
00260
00261 jButtonReset.setText("Reset");
00262 jButtonReset.setBounds(new Rectangle(355, 525, 75, 25));
00263 jLabelNapoveda.setText("Nápověda:");
00264 jLabelNapoveda.setBounds(new Rectangle(25, 550, 75, 20));
00265 jScrollPaneNapoveda.setBounds(new Rectangle(25, 570, 410, 65));
00266 jLabelLegenda.setText("Legenda:");
00267 jLabelLegenda.setBounds(new Rectangle(455, 595, 80, 20));
00268 jLabelLegenda.setFont(new Font("Dialog", 1, 12));
00269 jLabeli.setText("i = ");
00270 jLabeli.setBounds(new Rectangle(100, 470, 25, 20));
00271 jLabelj.setBounds(new Rectangle(170, 470, 25, 20));
00272 jLabelj.setText("j = ");
00273 jTextFieldi.setBounds(new Rectangle(125, 470, 35, 20));
00274 jTextFieldi.setBackground(new Color(99, 255, 99));
00275 jTextFieldj.setBounds(new Rectangle(195, 470, 35, 20));
00276 jTextFieldj.setBackground(new Color(115, 255, 255));
00277 jLabelm.setText("m = ");
00278 jLabelm.setBounds(new Rectangle(25, 470, 30, 20));
00279 jLabelm.setToolTipText("Délka hledaného řetězce");
00280 jTextFieldm.setBounds(new Rectangle(55, 470, 35, 20));
00281 jTextFieldm.setToolTipText("Délka hledaného řetězce");
00282 jTextFieldm.setBackground(Color.white);
00283 jLabelmj.setText("m-j+1 = ");
00284 jLabelmj.setBounds(new Rectangle(330, 470, 65, 20));
00285 jTextFieldmj.setBounds(new Rectangle(395, 470, 35, 20));
00286 jTextFieldmj.setBackground(new Color(255, 165, 165));
00287 jLabelij.setText("i-j+1 = ");
00288 jLabelij.setBounds(new Rectangle(240, 470, 55, 20));
00289 jTextFieldij.setBounds(new Rectangle(290, 470, 35, 20));
00290 jTextFieldij.setBackground(new Color(255, 255, 66));
00291 jLabeln.setText("n = ");
00292 jLabeln.setBounds(new Rectangle(25, 495, 30, 20));
00293 jLabeln.setToolTipText("Délka prohledávaného textu");
00294 jTextFieldn.setBounds(new Rectangle(55, 495, 35, 20));
00295 jTextFieldn.setToolTipText("Délka prohledávaného textu");
00296 jTextFieldn.setBackground(Color.white);
00297 jLabels.setText("s = ");
00298 jLabels.setBounds(new Rectangle(100, 495, 25, 20));
00299 jTextFields.setBounds(new Rectangle(125, 495, 35, 20));
00300 jTextFields.setBackground(new Color(255, 165, 214));
00301 jLabelt.setText("t = ");
00302 jLabelt.setBounds(new Rectangle(170, 495, 25, 20));
00303 jTextFieldt.setBounds(new Rectangle(195, 495, 35, 20));
00304 jTextFieldt.setBackground(new Color(198, 198, 255));
00305 jLabelL.setText(" L = ");
00306 jLabelL.setBounds(new Rectangle(245, 495, 45, 20));
00307 jTextFieldL.setBounds(new Rectangle(290, 495, 35, 20));
00308 jTextFieldL.setBackground(new Color(255, 222, 214));
00309 jLabelpoz.setText("poz = ");
00310 jLabelpoz.setBounds(new Rectangle(350, 495, 45, 20));
00311 jLabelpoz.setToolTipText("Pozice hledaného řetězce v textu");
00312 jTextFieldpoz.setBounds(new Rectangle(395, 495, 35, 20));
00313 jTextFieldpoz.setBackground(new Color(255, 181, 99));
00314 jTextFieldpoz.setToolTipText("Pozice hledaného řetězce v textu");
00315 jLabelPocitadloKroku.setBounds(new Rectangle(210, 525, 115, 25));
00316 jLabelPocitadloKroku.setHorizontalAlignment(SwingConstants.CENTER);
00317 jLabelPocitadloKroku.setToolTipText("null");
00318 jLabel1LegendaZvyrazneny.setText("Zvýraznění naposledy provedeného řádku zdrojového kódu");
00319 jLabel1LegendaZvyrazneny.setBounds(new Rectangle(545, 600, 370, 20));
00320 jLabel1LegendaZvyrazneny.setFont(new Font("Dialog", 0, 10));
00321 jTextFieldLegendaZvyrazneny.setBounds(new Rectangle(525, 605, 15, 10));
00322 jTextFieldLegendaZvyrazneny.setBackground(kon.BARVA_ZVYRAZNENI_P);
00323 jTextFieldLegendaZvyrazneny.setEditable(false);
00324
00325
00326 jButtonVpred.addMouseListener(new MouseAdapter() {
00327 public void mouseClicked(MouseEvent e)
00328 {
00329 jButtonVpred_mouseClicked(e);
00330 }
00331 });
00332
00333 jButtonZpet.addMouseListener(new MouseAdapter() {
00334 public void mouseClicked(MouseEvent e)
00335 {
00336 jButtonZpet_mouseClicked(e);
00337 }
00338 });
00339
00340 jButtonReset.addMouseListener(new MouseAdapter() {
00341 public void mouseClicked(MouseEvent e)
00342 {
00343 jButtonReset_mouseClicked(e);
00344 }
00345 });
00346
00347
00348 tabulkaSR.nastavObsah(0,1,"A");
00349 tabulkaSR.nastavObsah(0,1,"");
00350 tabulkaDelta1.nastavObsah(0,1,"A");
00351 tabulkaDelta1.nastavObsah(0,1,"");
00352 tabulkaDelta2.nastavObsah(0,1,"A");
00353 tabulkaDelta2.nastavObsah(0,1,"");
00354
00355
00356 tabulkaDelta1.nastavObsah(0,0,"c");
00357 tabulkaDelta1.nastavObsah(1,0,"delta1[c]");
00358 tabulkaDelta2.nastavObsah(0,0,"i");
00359 tabulkaDelta2.nastavObsah(1,0,"pat[i]");
00360 tabulkaDelta2.nastavObsah(2,0,"shoda[i]");
00361 tabulkaDelta2.nastavObsah(3,0,"delta2[i]");
00362
00363
00364 barevnyTextPaneAlgoritmus.setEditable(false);
00365
00366
00367 vypisAlgoritmus();
00368
00369
00370 jTextAreaNapoveda.setEditable(false);
00371
00372
00373 jTextAreaNapoveda.setText(kon.textyNapovedy[0]);
00374 zobrazenaNapoveda = 0;
00375
00376
00377 jTextFieldm.setEditable(false);
00378 jTextFieldn.setEditable(false);
00379 jTextFieldi.setEditable(false);
00380 jTextFieldj.setEditable(false);
00381 jTextFieldij.setEditable(false);
00382 jTextFieldmj.setEditable(false);
00383 jTextFields.setEditable(false);
00384 jTextFieldt.setEditable(false);
00385 jTextFieldL.setEditable(false);
00386 jTextFieldpoz.setEditable(false);
00387
00388
00389 jTextFieldm.setBorder(BorderFactory.createLineBorder(new Color(148,148,148), 1));
00390 jTextFieldn.setBorder(BorderFactory.createLineBorder(new Color(148,148,148), 1));
00391 jTextFieldi.setBorder(BorderFactory.createLineBorder(new Color(148,148,148), 1));
00392 jTextFieldj.setBorder(BorderFactory.createLineBorder(new Color(148,148,148), 1));
00393 jTextFieldij.setBorder(BorderFactory.createLineBorder(new Color(148,148,148), 1));
00394 jTextFieldmj.setBorder(BorderFactory.createLineBorder(new Color(148,148,148), 1));
00395 jTextFields.setBorder(BorderFactory.createLineBorder(new Color(148,148,148), 1));
00396 jTextFieldt.setBorder(BorderFactory.createLineBorder(new Color(148,148,148), 1));
00397 jTextFieldL.setBorder(BorderFactory.createLineBorder(new Color(148,148,148), 1));
00398 jTextFieldpoz.setBorder(BorderFactory.createLineBorder(new Color(148,148,148), 1));
00399
00400
00401
00402 jScrollPaneTabulkaSR.setViewportView(tabulkaSR);
00403 jScrollPaneTabulkaDelta1.setViewportView(tabulkaDelta1);
00404 jScrollPaneTabulkaDelta2.setViewportView(tabulkaDelta2);
00405 jScrollPaneAlgoritmus.setViewportView(barevnyTextPaneAlgoritmus);
00406 jScrollPaneNapoveda.setViewportView(jTextAreaNapoveda);
00407 jScrollPaneProhledavanyText.setViewportView(jTextAreaProhledavanyText);
00408
00409
00410 this.getContentPane().add(jTextFieldLegendaZvyrazneny, null);
00411 this.getContentPane().add(jLabel1LegendaZvyrazneny, null);
00412 this.getContentPane().add(jLabelPocitadloKroku, null);
00413 this.getContentPane().add(jTextFieldpoz, null);
00414 this.getContentPane().add(jLabelpoz, null);
00415 this.getContentPane().add(jTextFieldL, null);
00416 this.getContentPane().add(jLabelL, null);
00417 this.getContentPane().add(jTextFieldt, null);
00418 this.getContentPane().add(jLabelt, null);
00419 this.getContentPane().add(jTextFields, null);
00420 this.getContentPane().add(jLabels, null);
00421 this.getContentPane().add(jTextFieldn, null);
00422 this.getContentPane().add(jLabeln, null);
00423 this.getContentPane().add(jTextFieldij, null);
00424 this.getContentPane().add(jLabelij, null);
00425 this.getContentPane().add(jTextFieldmj, null);
00426 this.getContentPane().add(jLabelmj, null);
00427 this.getContentPane().add(jTextFieldm, null);
00428 this.getContentPane().add(jLabelm, null);
00429 this.getContentPane().add(jTextFieldj, null);
00430 this.getContentPane().add(jTextFieldi, null);
00431 this.getContentPane().add(jLabelj, null);
00432 this.getContentPane().add(jLabeli, null);
00433 this.getContentPane().add(jLabelLegenda, null);
00434 this.getContentPane().add(jScrollPaneNapoveda, null);
00435 this.getContentPane().add(jLabelNapoveda, null);
00436 this.getContentPane().add(jButtonReset, null);
00437 this.getContentPane().add(jButtonVpred, null);
00438 this.getContentPane().add(jButtonZpet, null);
00439 this.getContentPane().add(jLabelTabulkaDelta1, null);
00440 this.getContentPane().add(jLabelTabulkaDelta2, null);
00441 this.getContentPane().add(jScrollPaneTabulkaSR, null);
00442 this.getContentPane().add(jLabelAlgoritmus, null);
00443 this.getContentPane().add(jScrollPaneAlgoritmus, null);
00444 this.getContentPane().add(jScrollPaneProhledavanyText, null);
00445 this.getContentPane().add(jLabelProhledavanyText, null);
00446 this.getContentPane().add(jTextFieldHledanyRetezec, null);
00447 this.getContentPane().add(jLabelHledanyRetezec, null);
00448 this.getContentPane().add(jLabelNadpis);
00449 this.getContentPane().add(jScrollPaneTabulkaDelta1, null);
00450 this.getContentPane().add(jScrollPaneTabulkaDelta2, null);
00451
00452
00453 jButtonZpet.setEnabled(false);
00454 }
00455
00456
00457
00458
00459 public void init()
00460 {
00461 try {
00462 jbInit();
00463 } catch (Exception e) {
00464 e.printStackTrace();
00465 }
00466 }
00467
00468
00469
00470
00471
00472
00473 private void jButtonVpred_mouseClicked(MouseEvent e) {
00474 if (e.getButton()==e.BUTTON1 && ((Component)e.getSource()).isEnabled())
00475 {
00476 if (aktKrok == 0)
00477 {
00478 if (jTextFieldHledanyRetezec.getText().length() < 1)
00479 {
00480 JOptionPane.showMessageDialog(this, "Nebyl zadán hledaný řetězec",
00481 "Chyba",JOptionPane.ERROR_MESSAGE);
00482 return;
00483 }
00484 if (jTextAreaProhledavanyText.getText().length() < 1)
00485 {
00486 JOptionPane.showMessageDialog(this, "Nebyl zadán prohledávaný text",
00487 "Chyba",JOptionPane.ERROR_MESSAGE);
00488 return;
00489 }
00490
00491
00492 jTextFieldHledanyRetezec.setEditable(false);
00493 jTextAreaProhledavanyText.setEditable(false);
00494
00495
00496 aktKrok = 1;
00497
00498 pocetKroku = 1;
00499
00500
00501
00502
00503 algBMA.BMA(jTextFieldHledanyRetezec.getText(),jTextAreaProhledavanyText.getText());
00504
00505 iteratorViz = prubehViz.listIterator();
00506
00507
00508 jLabelPocitadloKroku.setText("krok 1 z " + pocetKroku);
00509
00510
00511 zobrazenaNapoveda = 1;
00512 jTextAreaNapoveda.setText(kon.textyNapovedy[zobrazenaNapoveda]);
00513
00514
00515 this.vypisBlokAlgoritmu(kon.BLOK_BMA,true);
00516
00517 this.zvyrazniRadek(9);
00518 }
00519 else
00520 {
00521 if (aktKrok < pocetKroku)
00522 {
00523 krokVpred();
00524
00525 if (aktKrok >= pocetKroku)
00526 {
00527 jButtonVpred.setEnabled(false);
00528 }
00529
00530 jButtonZpet.setEnabled(true);
00531 }
00532 else
00533 {
00534 jButtonVpred.setEnabled(false);
00535 }
00536 }
00537 }
00538 }
00539
00540
00541
00542
00543
00544
00545 private void jButtonZpet_mouseClicked(MouseEvent e) {
00546 if (e.getButton()==e.BUTTON1 && ((Component)e.getSource()).isEnabled())
00547 {
00548 if (aktKrok > 1)
00549 {
00550 krokZpet();
00551
00552 if (aktKrok <= 1)
00553 {
00554 jButtonZpet.setEnabled(false);
00555 }
00556
00557 jButtonVpred.setEnabled(true);
00558 }
00559 else
00560 {
00561 jButtonZpet.setEnabled(false);
00562 }
00563 }
00564 }
00565
00566
00567
00568
00569
00570
00571 private void jButtonReset_mouseClicked(MouseEvent e) {
00572 if (e.getButton()==e.BUTTON1 && ((Component)e.getSource()).isEnabled())
00573 {
00574
00575 jButtonZpet.setEnabled(false);
00576 jButtonVpred.setEnabled(true);
00577
00578 this.pocetKroku = 0;
00579 this.aktKrok = 0;
00580 this.jLabelPocitadloKroku.setText("");
00581
00582 this.prubehViz = new ArrayList<ZmenaZobrazeni>();
00583
00584 tabulkaSR.zmenRozmery(kon.TAB_SR_VR[0],kon.TAB_SR_VR[1]);
00585 tabulkaDelta1.zmenRozmery(kon.TAB_D1_VR[0],kon.TAB_D1_VR[1]);
00586 tabulkaDelta2.zmenRozmery(kon.TAB_D2_VR[0],kon.TAB_D2_VR[1]);
00587
00588 tabulkaSR.vyprazdniTabulku(true);
00589 tabulkaDelta1.vyprazdniTabulku(false);
00590 tabulkaDelta2.vyprazdniTabulku(false);
00591
00592 tabulkaSR.nastavObsah(0,1,"A");
00593 tabulkaSR.nastavObsah(0,1,"");
00594 tabulkaDelta1.nastavObsah(0,1,"A");
00595 tabulkaDelta1.nastavObsah(0,1,"");
00596 tabulkaDelta2.nastavObsah(0,1,"A");
00597 tabulkaDelta2.nastavObsah(0,1,"");
00598
00599 jTextAreaNapoveda.setText(kon.textyNapovedy[0]);
00600 zobrazenaNapoveda = 0;
00601
00602 barevnyTextPaneAlgoritmus.vyprazdniPanel();
00603 vypisAlgoritmus();
00604
00605 zvyraznenyRadek = kon.ZADNY_RADEK;
00606
00607 jLabelij.setText(kon.TEXTY_POPISKU_IMJ);
00608 jLabelmj.setText(kon.TEXTY_POPISKU_MJ);
00609 jLabelL.setText(kon.TEXTY_POPISKU_L);
00610
00611 jTextFieldm.setText("");
00612 jTextFieldn.setText("");
00613 jTextFieldi.setText("");
00614 jTextFieldj.setText("");
00615 jTextFieldij.setText("");
00616 jTextFieldmj.setText("");
00617 jTextFields.setText("");
00618 jTextFieldt.setText("");
00619 jTextFieldL.setText("");
00620 jTextFieldpoz.setText("");
00621
00622 jTextFieldHledanyRetezec.setEditable(true);
00623 jTextAreaProhledavanyText.setEditable(true);
00624 }
00625 }
00626
00627
00628
00629
00630 private void vypisAlgoritmus()
00631 {
00632
00633 vypisBlokAlgoritmu(kon.BLOK_DEKLARACE,false);
00634 vypisBlokAlgoritmu(kon.BLOK_BMA,false);
00635 vypisBlokAlgoritmu(kon.BLOK_DELTA1,false);
00636 vypisBlokAlgoritmu(kon.BLOK_DELTA2,false);
00637 this.zobrazenyBlokAlgoritmu = 0;
00638 }
00639
00640
00641
00642
00643
00644
00645
00646 private void vypisBlokAlgoritmu(int cislo, boolean vymazat)
00647 {
00648 if (vymazat)
00649 {
00650 barevnyTextPaneAlgoritmus.vyprazdniPanel();
00651 }
00652 for (int i = kon.blokyAlgoritmu[cislo][0]; i <= kon.blokyAlgoritmu[cislo][1]; i++)
00653 {
00654 barevnyTextPaneAlgoritmus.pridejText(kon.textyAlgoritmu[i],kon.barvyAlgoritmu[i],
00655 new Color(255,255,255),
00656 kon.tucneCastiAlgoritmu[i]);
00657 }
00658 this.zobrazenyBlokAlgoritmu = cislo;
00659 }
00660
00661
00662
00663
00664
00665
00666 private void zvyrazniRadek(int cislo)
00667 {
00668 int zacatek;
00669 int konec;
00670 if (zvyraznenyRadek != kon.ZADNY_RADEK)
00671 {
00672
00673 zacatek = kon.radkyAlgoritmu[zvyraznenyRadek][0] - kon.blokyAlgoritmu[zobrazenyBlokAlgoritmu][0];
00674 konec = kon.radkyAlgoritmu[zvyraznenyRadek][1] - kon.blokyAlgoritmu[zobrazenyBlokAlgoritmu][0];
00675 for (int i = zacatek; i <= konec; i++)
00676 {
00677 this.barevnyTextPaneAlgoritmus.nastavVychoziBarvu(i);;
00678 }
00679 }
00680 if (cislo != kon.ZADNY_RADEK)
00681 {
00682
00683 zacatek = kon.radkyAlgoritmu[cislo][0] - kon.blokyAlgoritmu[zobrazenyBlokAlgoritmu][0];
00684 konec = kon.radkyAlgoritmu[cislo][1] - kon.blokyAlgoritmu[zobrazenyBlokAlgoritmu][0];
00685 for (int i = zacatek; i <= konec; i++)
00686 {
00687 this.barevnyTextPaneAlgoritmus.nastavBarvu(i,kon.BARVA_ZVYRAZNENI_T,kon.BARVA_ZVYRAZNENI_P);
00688 }
00689 }
00690 zvyraznenyRadek = cislo;
00691 }
00692
00693
00694
00695
00696
00697
00698
00699 private void nastavPolePromenne(int cislo,int hodnota)
00700 {
00701 Integer pomI;
00702 pomI = new Integer(hodnota);
00703
00704
00705 nastavPolePromenne(cislo,pomI.toString());
00706 }
00707
00708
00709
00710
00711
00712
00713
00714 private void nastavPolePromenne(int cislo,String hodnota)
00715 {
00716
00717 if (cislo == kon.PROM_M)
00718 {
00719 this.jTextFieldm.setText(hodnota);
00720 }
00721 else if (cislo == kon.PROM_N)
00722 {
00723 this.jTextFieldn.setText(hodnota);
00724 }
00725 else if (cislo == kon.PROM_I)
00726 {
00727 this.jTextFieldi.setText(hodnota);
00728 }
00729 else if (cislo == kon.PROM_J)
00730 {
00731 this.jTextFieldj.setText(hodnota);
00732 }
00733 else if (cislo == kon.PROM_IJ)
00734 {
00735 this.jTextFieldij.setText(hodnota);
00736 }
00737 else if (cislo == kon.PROM_MJ)
00738 {
00739 this.jTextFieldmj.setText(hodnota);
00740 }
00741 else if (cislo == kon.PROM_S)
00742 {
00743 this.jTextFields.setText(hodnota);
00744 }
00745 else if (cislo == kon.PROM_T)
00746 {
00747 this.jTextFieldt.setText(hodnota);
00748 }
00749 else if (cislo == kon.PROM_L)
00750 {
00751 this.jTextFieldL.setText(hodnota);
00752 }
00753 else if (cislo == kon.PROM_POZ)
00754 {
00755 this.jTextFieldpoz.setText(hodnota);
00756 }
00757 }
00758
00759
00760
00761
00762
00763
00764
00765 private String vratObsahPolePromenne(int cislo)
00766 {
00767
00768 if (cislo == kon.PROM_M)
00769 {
00770 return jTextFieldm.getText();
00771 }
00772 else if (cislo == kon.PROM_N)
00773 {
00774 return jTextFieldn.getText();
00775 }
00776 else if (cislo == kon.PROM_I)
00777 {
00778 return jTextFieldi.getText();
00779 }
00780 else if (cislo == kon.PROM_J)
00781 {
00782 return jTextFieldj.getText();
00783 }
00784 else if (cislo == kon.PROM_IJ)
00785 {
00786 return jTextFieldij.getText();
00787 }
00788 else if (cislo == kon.PROM_MJ)
00789 {
00790 return jTextFieldmj.getText();
00791 }
00792 else if (cislo == kon.PROM_S)
00793 {
00794 return jTextFields.getText();
00795 }
00796 else if (cislo == kon.PROM_T)
00797 {
00798 return jTextFieldt.getText();
00799 }
00800 else if (cislo == kon.PROM_L)
00801 {
00802 return jTextFieldL.getText();
00803 }
00804 else if (cislo == kon.PROM_POZ)
00805 {
00806 return jTextFieldpoz.getText();
00807 }
00808 return "";
00809 }
00810
00811
00812
00813
00814 private void krokVpred()
00815 {
00816 ZmenaZobrazeni zmena;
00817 boolean konec = false;
00818
00819 aktKrok++;
00820
00821
00822 jLabelPocitadloKroku.setText("krok " + aktKrok + " / " + pocetKroku);
00823
00824 if (!iteratorViz.hasNext())
00825 {
00826 return;
00827 }
00828
00829
00830 zmena = (ZmenaZobrazeni)iteratorViz.next();
00831
00832 while (!konec && zmena.cisloKroku == aktKrok)
00833 {
00834 if (zmena.operace == kon.ZM_T_H)
00835 {
00836 if (zmena.tabulka == kon.TAB_SR)
00837 {
00838
00839 zmena.puvodniObsah = tabulkaSR.vratObsah(zmena.radek,zmena.sloupec);
00840 tabulkaSR.nastavObsah(zmena.radek,zmena.sloupec,zmena.novyObsah);
00841 }
00842 else if (zmena.tabulka == kon.TAB_D1)
00843 {
00844
00845 zmena.puvodniObsah = tabulkaDelta1.vratObsah(zmena.radek,zmena.sloupec);
00846 tabulkaDelta1.nastavObsah(zmena.radek,zmena.sloupec,zmena.novyObsah);
00847 }
00848 else if (zmena.tabulka == kon.TAB_D2)
00849 {
00850
00851 zmena.puvodniObsah = tabulkaDelta2.vratObsah(zmena.radek,zmena.sloupec);
00852 tabulkaDelta2.nastavObsah(zmena.radek,zmena.sloupec,zmena.novyObsah);
00853 }
00854 }
00855 else if (zmena.operace == kon.ZM_T_B)
00856 {
00857 if (zmena.tabulka == kon.TAB_SR)
00858 {
00859
00860 zmena.puvodniBarvaTextu = tabulkaSR.vratBarvu(zmena.radek,zmena.sloupec,0);
00861 zmena.puvodniBarvaPozadi = tabulkaSR.vratBarvu(zmena.radek,zmena.sloupec,1);
00862 tabulkaSR.nastavBarvu(zmena.radek,zmena.sloupec,zmena.barvaPozadi,
00863 zmena.barvaTextu);
00864 }
00865 else if (zmena.tabulka == kon.TAB_D1)
00866 {
00867
00868 zmena.puvodniBarvaTextu = tabulkaDelta1.vratBarvu(zmena.radek,zmena.sloupec,0);
00869 zmena.puvodniBarvaPozadi = tabulkaDelta1.vratBarvu(zmena.radek,zmena.sloupec,1);
00870 tabulkaDelta1.nastavBarvu(zmena.radek,zmena.sloupec,zmena.barvaPozadi,
00871 zmena.barvaTextu);
00872 }
00873 else if (zmena.tabulka == kon.TAB_D2)
00874 {
00875
00876 zmena.puvodniBarvaTextu = tabulkaDelta2.vratBarvu(zmena.radek,zmena.sloupec,0);
00877 zmena.puvodniBarvaPozadi = tabulkaDelta2.vratBarvu(zmena.radek,zmena.sloupec,1);
00878 tabulkaDelta2.nastavBarvu(zmena.radek,zmena.sloupec,zmena.barvaPozadi,
00879 zmena.barvaTextu);
00880 }
00881 }
00882 else if (zmena.operace == kon.ZM_T_P)
00883 {
00884 if (zmena.tabulka == kon.TAB_SR)
00885 {
00886
00887 tabulkaSR.posunRadek(zmena.radek,zmena.smer,zmena.pocet);
00888 }
00889 else if (zmena.tabulka == kon.TAB_D1)
00890 {
00891
00892 tabulkaDelta1.posunRadek(zmena.radek,zmena.smer,zmena.pocet);
00893 }
00894 else if (zmena.tabulka == kon.TAB_D2)
00895 {
00896
00897 tabulkaDelta2.posunRadek(zmena.radek,zmena.smer,zmena.pocet);
00898 }
00899 }
00900 else if (zmena.operace == kon.ZM_T_R)
00901 {
00902 if (zmena.tabulka == kon.TAB_SR)
00903 {
00904
00905 zmena.puvodneRadku = tabulkaSR.vratPocetRadkuTabulky();
00906 zmena.puvodneSloupcu = tabulkaSR.vratPocetSloupcuTabulky();
00907 tabulkaSR.zmenRozmery(zmena.radek,zmena.sloupec);
00908 }
00909 else if (zmena.tabulka == kon.TAB_D1)
00910 {
00911
00912 zmena.puvodneRadku = tabulkaDelta1.vratPocetRadkuTabulky();
00913 zmena.puvodneSloupcu = tabulkaDelta1.vratPocetSloupcuTabulky();
00914 tabulkaDelta1.zmenRozmery(zmena.radek,zmena.sloupec);
00915 }
00916 else if (zmena.tabulka == kon.TAB_D2)
00917 {
00918
00919 zmena.puvodneRadku = tabulkaDelta2.vratPocetRadkuTabulky();
00920 zmena.puvodneSloupcu = tabulkaDelta2.vratPocetSloupcuTabulky();
00921 tabulkaDelta2.zmenRozmery(zmena.radek,zmena.sloupec);
00922 }
00923 }
00924 else if (zmena.operace == kon.ZM_A_B)
00925 {
00926
00927 zmena.puvodniCislo = zobrazenyBlokAlgoritmu;
00928 vypisBlokAlgoritmu(zmena.cislo,true);
00929 }
00930 else if (zmena.operace == kon.ZM_A_Z)
00931 {
00932
00933 zmena.puvodniCislo = zvyraznenyRadek;
00934 zvyrazniRadek(zmena.cislo);
00935 }
00936 else if (zmena.operace == kon.ZM_P)
00937 {
00938
00939 zmena.puvodniObsah = vratObsahPolePromenne(zmena.cislo);
00940 nastavPolePromenne(zmena.cislo,zmena.novyObsah);
00941 }
00942 else if (zmena.operace == kon.ZM_N)
00943 {
00944
00945 zmena.puvodniCislo = zobrazenaNapoveda;
00946 zobrazenaNapoveda = zmena.cislo;
00947 jTextAreaNapoveda.setText(kon.textyNapovedy[zmena.cislo]);
00948 }
00949 else if (zmena.operace == kon.ZM_PO)
00950 {
00951 if (zmena.cislo == kon.POPISEK_IJ)
00952 {
00953
00954 zmena.puvodniObsah = jLabelij.getText();
00955 jLabelij.setText(zmena.novyObsah);
00956 }
00957 else if (zmena.cislo == kon.POPISEK_MJ)
00958 {
00959
00960 zmena.puvodniObsah = jLabelmj.getText();
00961 jLabelmj.setText(zmena.novyObsah);
00962 }
00963 else if (zmena.cislo == kon.POPISEK_L)
00964 {
00965
00966 zmena.puvodniObsah = jLabelL.getText();
00967 jLabelL.setText(zmena.novyObsah);
00968 }
00969 }
00970
00971 if (iteratorViz.hasNext())
00972 {
00973
00974 zmena = (ZmenaZobrazeni)iteratorViz.next();
00975 }
00976 else
00977 {
00978 konec = true;
00979 }
00980 }
00981
00982 if (zmena.cisloKroku != aktKrok)
00983 {
00984 zmena = (ZmenaZobrazeni)iteratorViz.previous();
00985 }
00986 }
00987
00988
00989
00990
00991 private void krokZpet()
00992 {
00993 ZmenaZobrazeni zmena;
00994 boolean konec = false;
00995
00996 if (!iteratorViz.hasPrevious())
00997 {
00998 return;
00999 }
01000
01001
01002 zmena = (ZmenaZobrazeni)iteratorViz.previous();
01003
01004 while (!konec && zmena.cisloKroku == aktKrok)
01005 {
01006 if (zmena.operace == kon.ZM_T_H)
01007 {
01008 if (zmena.tabulka == kon.TAB_SR)
01009 {
01010 tabulkaSR.nastavObsah(zmena.radek,zmena.sloupec,zmena.puvodniObsah);
01011 }
01012 else if (zmena.tabulka == kon.TAB_D1)
01013 {
01014 tabulkaDelta1.nastavObsah(zmena.radek,zmena.sloupec,zmena.puvodniObsah);
01015 }
01016 else if (zmena.tabulka == kon.TAB_D2)
01017 {
01018 tabulkaDelta2.nastavObsah(zmena.radek,zmena.sloupec,zmena.puvodniObsah);
01019 }
01020 }
01021 else if (zmena.operace == kon.ZM_T_B)
01022 {
01023 if (zmena.tabulka == kon.TAB_SR)
01024 {
01025 tabulkaSR.nastavBarvu(zmena.radek,zmena.sloupec,zmena.puvodniBarvaPozadi,
01026 zmena.puvodniBarvaTextu);
01027 }
01028 else if (zmena.tabulka == kon.TAB_D1)
01029 {
01030 tabulkaDelta1.nastavBarvu(zmena.radek,zmena.sloupec,zmena.puvodniBarvaPozadi,
01031 zmena.puvodniBarvaTextu);
01032 }
01033 else if (zmena.tabulka == kon.TAB_D2)
01034 {
01035 tabulkaDelta2.nastavBarvu(zmena.radek,zmena.sloupec,zmena.puvodniBarvaPozadi,
01036 zmena.puvodniBarvaTextu);
01037 }
01038 }
01039 else if (zmena.operace == kon.ZM_T_P)
01040 {
01041 if (zmena.tabulka == kon.TAB_SR)
01042 {
01043 if (zmena.smer == tabulkaSR.POSUN_VPRAVO)
01044 {
01045 tabulkaSR.posunRadek(zmena.radek,tabulkaSR.POSUN_VLEVO,zmena.pocet);
01046 }
01047 else
01048 {
01049 tabulkaSR.posunRadek(zmena.radek,tabulkaSR.POSUN_VPRAVO,zmena.pocet);
01050 }
01051 }
01052 else if (zmena.tabulka == kon.TAB_D1)
01053 {
01054 if (zmena.smer == tabulkaDelta1.POSUN_VPRAVO)
01055 {
01056 tabulkaDelta1.posunRadek(zmena.radek,tabulkaDelta1.POSUN_VLEVO,zmena.pocet);
01057 }
01058 else
01059 {
01060 tabulkaDelta1.posunRadek(zmena.radek,tabulkaDelta1.POSUN_VPRAVO,zmena.pocet);
01061 }
01062 }
01063 else if (zmena.tabulka == kon.TAB_D2)
01064 {
01065 if (zmena.smer == tabulkaDelta2.POSUN_VPRAVO)
01066 {
01067 tabulkaDelta2.posunRadek(zmena.radek,tabulkaDelta2.POSUN_VLEVO,zmena.pocet);
01068 }
01069 else
01070 {
01071 tabulkaDelta2.posunRadek(zmena.radek,tabulkaDelta2.POSUN_VPRAVO,zmena.pocet);
01072 }
01073 }
01074 }
01075 else if (zmena.operace == kon.ZM_T_R)
01076 {
01077 if (zmena.tabulka == kon.TAB_SR)
01078 {
01079 tabulkaSR.zmenRozmery(zmena.puvodneRadku,zmena.puvodneSloupcu);
01080 }
01081 else if (zmena.tabulka == kon.TAB_D1)
01082 {
01083 tabulkaDelta1.zmenRozmery(zmena.puvodneRadku,zmena.puvodneSloupcu);
01084 }
01085 else if (zmena.tabulka == kon.TAB_D2)
01086 {
01087 tabulkaDelta2.zmenRozmery(zmena.puvodneRadku,zmena.puvodneSloupcu);
01088 }
01089 }
01090 else if (zmena.operace == kon.ZM_A_B)
01091 {
01092 vypisBlokAlgoritmu(zmena.puvodniCislo,true);
01093 }
01094 else if (zmena.operace == kon.ZM_A_Z)
01095 {
01096 zvyrazniRadek(zmena.puvodniCislo);
01097 }
01098 else if (zmena.operace == kon.ZM_P)
01099 {
01100 nastavPolePromenne(zmena.cislo,zmena.puvodniObsah);
01101 }
01102 else if (zmena.operace == kon.ZM_N)
01103 {
01104 zobrazenaNapoveda = zmena.puvodniCislo;
01105 jTextAreaNapoveda.setText(kon.textyNapovedy[zmena.puvodniCislo]);
01106 }
01107 else if (zmena.operace == kon.ZM_PO)
01108 {
01109 if (zmena.cislo == kon.POPISEK_IJ)
01110 {
01111 jLabelij.setText(zmena.puvodniObsah);
01112 }
01113 else if (zmena.cislo == kon.POPISEK_MJ)
01114 {
01115 jLabelmj.setText(zmena.puvodniObsah);
01116 }
01117 else if (zmena.cislo == kon.POPISEK_L)
01118 {
01119 jLabelL.setText(zmena.puvodniObsah);
01120 }
01121 }
01122
01123 if (iteratorViz.hasPrevious())
01124 {
01125
01126 zmena = (ZmenaZobrazeni)iteratorViz.previous();
01127 }
01128 else
01129 {
01130 konec = true;
01131 }
01132 }
01133
01134 if (zmena.cisloKroku != aktKrok)
01135 {
01136 zmena = (ZmenaZobrazeni)iteratorViz.next();
01137 }
01138
01139 aktKrok--;
01140
01141
01142 jLabelPocitadloKroku.setText("krok " + aktKrok + " / " + pocetKroku);
01143 }
01144
01145 }
01146
01147