Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Java: руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… (Π›ΠŸ)Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 121

Автор Π¨ΠΈΠ»Π΄Ρ‚ Π“Π΅Ρ€Π±Π΅Ρ€Ρ‚

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ конструктор класса SwingFC, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.SwingFCO {// ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ JFrameJFrame jfrm = new JFrame("Compare Files");// ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ диспСтчСр ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ FlowLayoutj frm.setLayout(new FlowLayout());// Π·Π°Π΄Π°Ρ‚ΡŒ исходныС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ€Π°ΠΌΠΊΠΈ ΠΎΠΊΠ½Π°jfrm.setSize (200, 190);// Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ послС закрытия ΠΎΠΊΠ½Π°jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ поля для Π²Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ²jtfFirst = new JTextField(14);jtfSecond = new JTextField(14);// ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ дСйствия для ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° тСкстаj tfFirst.setActionCommand("fileA");jtfSecond.setActionCommand("fileB");// ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ CompareJButton jbtnComp = new JButton("Compare");// Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ событий дСйствия ΠΎΡ‚ ΠΊΠ½ΠΎΠΏΠΊΠΈ ConqparejbtnComp.addActionListener(this);// ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΈjlabFirst = new JLabel("First file: ");jlabSecond = new JLabel("Second file: ");jlabResult = new JLabel("");// Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ содСрТимогоjfrm.add(jlabFirst);jfrm.add(jtfFirst);jfrm.add(jlabSecond);jfrm.add(jtfSecond);jfrm.add(jbtnComp);jfrm.add(jlabResult);// ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ€Π°ΠΌΠΊΡƒ ΠΎΠΊΠ½Π°jfrm.setVisible(true);}

Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ исходного ΠΊΠΎΠ΄Π° этого конструктора Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Π°ΠΌ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΠ°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ лишь Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ: ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ событий дСйствия вводится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ jbtnCompare, Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΈ событий дСйствия для ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° тСкста Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ содСрТимоС ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° тСкста трСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° наТимаСтся ΠΊΠ½ΠΎΠΏΠΊΠ° Compare (Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ), Π° Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ врСмя Π² ΠΈΡ… содСрТимом Π½Π΅Ρ‚ особой Π½ΡƒΠΆΠ΄Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΈ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ смысла ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Π½Π° Π»ΡŽΠ±Ρ‹Π΅ события ΠΎΡ‚ ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° тСкста. Когда Π²Ρ‹ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ хотя Π±Ρ‹ нСсколько Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Swing, Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ событий ΠΎΡ‚ ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° тСкста Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π΄ΠΊΠΎ.

НачнитС созданиС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° событий actionPerformedO Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Compare. // ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ послС наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ Compare public void actionPerformed(ActionEvent ae) { int i=0, j=0; // сначала ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π²Π²Π΅Π΄Π΅Π½Ρ‹ ΠΈΠΌΠ΅Π½Π° ΠΎΠ±ΠΎΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² if(jtfFirst.getText().equals("")) { jlabResult.setText("First file name missing."); return; } if(jtfSecond.getText().equals("")) { jlabResult.setText("Second file name missing."); return; } }

Π’ Π½Π°Ρ‡Π°Π»Π΅ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° провСряСтся, Π²Π²Π΅Π» Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° тСкста. Если ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΈΠ· этих ΠΏΠΎΠ»Π΅ΠΉ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ пустым, выводится ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° события завСщаСтся.

Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚Π΅ созданиС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° событий, ввСдя ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ исходный ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ„Π°ΠΉΠ»Ρ‹ сначала ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ, Π° Π·Π°Ρ‚Π΅ΠΌ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ. // ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ try с рСсурсами try (FilelnputStrdam fl = new FilelnputStream(jtfFirst.getText()); FilelnputStream f2 = new FilelnputStream(jtfSecond.getText())) { // ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ содСрТимоС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° do { i = f1.read(); j = f2.read(); if(i != j) break; } while(i != -1 && j != -1); if (i != j) jlabResult.setText("Files are not the same."); else jlabResult.setText("Files compare equal."); } catch(IOException exc) { jlabResult.setText("File Error"); } }

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π² класс SwingFC ΠΌΠ΅Ρ‚ΠΎΠ΄ main (), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅. public static void main(String args[]) { // ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π°ΠΌΠΊΡƒ ΠΎΠΊΠ½Π° Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ диспСтчСризации событий SwingUtilities.invokeLater(new Runnable() { public void run() { new SwingFC(); } }); } }

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ вСсь исходный ΠΊΠΎΠ΄ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ сравнСния Ρ„Π°ΠΉΠ»ΠΎΠ². /* ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для опробования 15-1. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° сравнСния Ρ„Π°ΠΉΠ»ΠΎΠ², создаваСмая Π½Π° основС Swing. Для компиляции этой ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ трСбуСтся JDK 7 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ поздняя вСрсия Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π°. */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; class SwingFC implements ActionListener { JTextField jtfFirst; // ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ для хранСния ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° JTextField jtfSecond; // ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ для хранСния ΠΈΠΌΠ΅Π½ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° JButton jbtnComp; // Кнопка для сравнСния Ρ„Π°ΠΉΠ»ΠΎΠ² JLabel jlabFirst, jlabSecond; // Подсказки для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ JLabel jlabResult; // БвСдСния ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… ΠΈ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… SwingFC() { // ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ JFrame JFrame jfrm = new JFrame("Compare Files"); // ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ диспСтчСр ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ FlowLayout jfrm.setLayout(new FlowLayout()); // Π·Π°Π΄Π°Ρ‚ΡŒ исходныС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ€Π°ΠΌΠΊΠΈ ΠΎΠΊΠ½Π° jfrm.setSize(200, 190); // Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ послС закрытия ΠΎΠΊΠ½Π° j frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ поля для Π²Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² jtfFirst = new JTextField(14); jtfSecond = new JTextField(14); // ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ дСйствия для ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° тСкста jtfFirst.setActionCommand("fileA"); jtfSecond.setActionCommand("fileB"); // ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Compare JButton jbtnComp = new JButton("Compare"); // Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ событий дСйствия ΠΎΡ‚ ΠΊΠ½ΠΎΠΏΠΊΠΈ Compare jbtnComp.addActionListener(this) ; // ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΈ jlabFirst = new JLabel("First file: "); jlabSecond = new JLabel("Second file: "); jlabResult = new JLabel(""); // Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ содСрТимого jfrm.add(jlabFirst); jfrm.add(jtfFirst); jfrm.add(jlabSecond); jfrm.add(jtfSecond); jfrm.add(jbtnComp); jfrm.add(jlabResult); // ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ€Π°ΠΌΠΊΡƒ ΠΎΠΊΠ½Π° jfrm.setVisible(true); } // ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ послС наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ Compare public void actionPerformed(ActionEvent ae) { int i=0, j=0; // сначала ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π²Π²Π΅Π΄Π΅Π½Ρ‹ ΠΈΠΌΠ΅Π½Π° ΠΎΠ±ΠΎΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² if(jtfFirst.getText().equals("")) { jlabResult.setText("First file name missing."); return; } if(jtfSecond.getText().equals("") ) { jlabResult.setText("Second file name missing."); return; } // ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ try с рСсурсами try (FilelnputStream fl = new FilelnputStream(jtfFirst.getText()) { FilelnputStream f2 = new FilelnputStream(jtfSecond.getText())) // ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ содСрТимоС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° do { i = f1.read(); j = f2.read(); if(i != j) break; } whiled != -1 && j != -1); if(i != j) jlabResult.setText("Files are not the same."); else jlabResult.setText("Files compare equal."); } catch(IOException exc) { jlabResult.setText("File Error"); } } public static void main(String args[]) { // ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π°ΠΌΠΊΡƒ ΠΎΠΊΠ½Π° Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ диспСтчСризации событий SwingUtilities.invokeLater(new Runnable() { public void run() { new SwingFC(); } }) ; } }ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², рассмотрСнных Π΄ΠΎ сих ΠΏΠΎΡ€ Π² этой Π³Π»Π°Π²Π΅, Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°Π»ΠΈΡΡŒ особой ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ. Π’Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ нСслоТными Π±Ρ‹Π»ΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² Π½ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий, Π² Ρ€ΠΎΠ»ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… выступал основной класс прилоТСния, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° событий, Π° всС события ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π»ΠΈΡΡŒ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ экзСмпляру этого класса. И хотя Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π΅Π½ для написания ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом, Π΅Π³ΠΎ нСльзя Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ СдинствСнно Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ. Π’ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ способы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий, происходящих Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ интСрфСйсС. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ события ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ классС. Благодаря этому Ρ€Π°Π·Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Π΅ события Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… классах. И Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΈ событий ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов.

Π£ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ класса Π½Π΅Ρ‚ ΠΈΠΌΠ΅Π½ΠΈ, Π° экзСмпляр Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса получаСтся динамичСски ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости. АнонимныС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ классы ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ созданиС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² событий. Допустим, имССтся ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ jbtn Ρ‚ΠΈΠΏΠ° JButton. ΠŸΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ событий дСйствия ΠΎΡ‚ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:jbtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { // ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ событиС здСсь }});

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс ActionListener. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ особоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° синтаксис, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ создании этого класса. Π’Π΅Π»ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ класса начинаСтся послС символа {, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ new ActionListener (). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° addActionListener () Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобкой ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой, Ρ‚.Π΅. ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ. Π’Π°ΠΊΠΎΠΉ синтаксис ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ создании Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π»ΡŽΠ±Ρ‹Ρ… событий. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ для Ρ€Π°Π·Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Ρ… событий Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΈ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.