В примерах в этой статье суммируются распространенные методы реагирования на события в Java, включая мониторинг классов контейнеров, классы прослушивателей, AbstractAction, отражение и т. д. Для справки. Конкретные методы заключаются в следующем:
Прежде всего, в графическом пользовательском интерфейсе Java для обработки событий необходимы следующие шаги :
1. Создайте компонент (управление), принимающий ответы.
2. Реализуйте соответствующие интерфейсы прослушивания событий.
3. Зарегистрируйте прослушиватель действий источника событий.
4. Обработка событий при срабатывании события
Соответственно, реагирование на инциденты может осуществляться следующим централизованным образом.
1. Мониторинг классов контейнеров <br/>Эффект: нажмите три кнопки в форме, чтобы добиться соответствующего времени ответа.
import java.awt.*; import java.awt.event.*; import javax.swing.*; //При объявлении класса добавьте «реализует ActionListener» для реализации интерфейса прослушивания. затем разделите запятыми // Например, класс «реализует ActionListener,KeyListener» ButtonListener расширяет JFrame реализует ActionListener { JButton ok, cancel,exit //Создаем компонент, который принимает ответы, то есть три кнопки public. ButtonListener(String title) { super(title); this.setLayout(new FlowLayout()); ок = новый JButton("ОК"); отмена = новый JButton("Return"); выход = новый JButton("Выход") ; //Следующие три оператора регистрируют прослушиватели для кнопок ok.addActionListener(this); cancel.addActionListener(this); exit.addActionListener(this); getContentPane().add(ok); getContentPane().add(cancel); getContentPane().add(exit); //Завершаем обработку события при его срабатывании public void actionPerformed(ActionEvent e){ if(e. getSource ()==ok) System.out.println("OK"); if(e.getSource()==cancel) System.out.println("Return"); if(e.getSource()==exit) System.exit(0);; } public static void main(String args[]) { ButtonListener pd=new ButtonListener("ActionEvent Demo"); pd.setVisible(истина); } }
2. Класс мониторинга реализует эффект: нажмите три кнопки в форме, чтобы установить соответствующее время.
import java.awt.*; import java.awt.event.*; import javax.swing.*; class ButtonListener1 расширяет JFrame { // Здесь нет реализации мониторинга JButton, ок, отмена, выход; public ButtonListener1(String title) { super(title); this.setLayout(new FlowLayout()); ок = новый JButton("ОК"); отмена = новый JButton("Return"); = new JButton("Выход"); ok.addActionListener(new MyListener()); cancel.addActionListener(new MyListener());; exit.addActionListener(new MyListener());; getContentPane().add(ok); getContentPane().add(cancel); getContentPane().add(exit); public static void main(String args[]) { ButtonListener pd = new ButtonListener("ActionEvent Demo"); pd.setSize(250,100); pd.setVisible(true); } // Класс прослушивания событий MyListener реализует ActionListener { public void actionPerformed(ActionEvent e) { if( e .getActionCommand()=="ОК") System.out.println("ОК"); if(e.getActionCommand()=="Return") System.out.println("Return"); if(e.getActionCommand()=="Exit") System.exit(0);; } }
3. Используйте класс AbstractAction для реализации мониторинга.
Эффект: Нажмите на меню, чтобы ответить.
импорт java.awt.BorderLayout; импорт javax.swing.AbstractAction; импорт javax.swing.JFrame; импорт javax.swing.JMenuBar; ; импортировать javax.swing.JMenuItem; импортировать javax.swing.JOptionPane; //Этот класс наследует AbstractAction и должен реализовать метод actionPerformed(). class AbstractEvent расширяет AbstractAction{ //private static Final long SerialVersionUID = 1L; AbstractEvent(){ } public void actionPerformed(ActionEvent e){ //Всплывающее диалоговое окно подтверждения if (e.getActionCommand()=="open"){ JOptionPane . showMessageDialog(null, "open"); }else if (e.getActionCommand()=="закрыть"){ JOptionPane.showMessageDialog(null, «Закрыть»); }else if (e.getActionCommand()=="run") { JOptionPane.showMessageDialog(null, "Run" }else if (e.getActionCommand()=="); стоп") { JOptionPane.showMessageDialog(null, "стоп"); } } } общественный класс TestAbstractEvent {частный статический JMenuBar Menubar; частный статический кадр JFrame; //Специальный обработчик для указания MenuEvent завершается классом AbstractEvent. окончательное действие MenuEvent = новый AbstractEvent(); public TestAbstractEvent() {frame=new JFrame("меню");frame.getContentPane().setLayout(new BorderLayout()); ("файл"); //Создаем экземпляр пункта меню и добавляем прослушиватель для openAction, JMenuItemmenuItemopen=new JMenuItem("открыть"); MenuItemopen.addActionListener(MenuEvent); JMenuItemmenuItemclose=new JMenuItem("закрыть"); "); JMenuItem menuItemrun=new JMenuItem("run"); .add(Файлменю); menubar.add(menuTool);frame.add(menubar,BorderLayout.NORTH);frame.setSize(400,200);frame.setVisible(true); public static void main(String[] args) {новый TestAbstractEvent() } };
4. Класс AbstractAction + метод отражения <br/>Эффект: нажмите три кнопки на панели инструментов, и через имя кнопки отражение получит ответ реализации класса с тем же именем, что и кнопка.
импорт java.awt.BorderLayout; импорт javax.swing.*; класс ViewAction расширяет AbstractAction {частное String ActionName=""; //частное JFrame кадр = null; частное действие = null; ViewAction() { } public ViewAction(String ActionName) { this.ActionName=ActionName; //this.frame=frame } @Override public void; actionPerformed (ActionEvent e) { Action action = getAction (this.ActionName); action.execute () } Private Action getAction (String ActionName) { try { if (this.action == null) { Action action = (Action) Class; .forName(ActionName).newInstance(); this.action=action; } return this.action; }catch(Exception e) { return null; } } public class TestAE; расширяет JFrame {public JToolBar bar = new JToolBar () String buttonName [] = {"b1", "b2", "b3"}; public TestAE() { super ("Event"); i<buttonName.length;i++){ ViewAction action=new ViewAction(buttonName[i]); JButton button=new JButton(buttonName[i]); button.addActionListener(action); bar.add(button); } this.getContentPane().add(bar,BorderLayout.NORTH); this.setSize(300, 200); this.setLocationRelativeTo(null); true); } Public static void main(String [] args) {new TestAE() } } Interface Action {void); выполнить (); } класс b1 реализует действие { public void Execute () { JOptionPane.showMessageDialog (null, «b1 был нажат» } } класс b2 реализует действие { public void Execute () { JOptionPane.showMessageDialog (null, « b2); был нажат"); } } класс b3 реализует Action{ public void Execute(){ JOptionPane.showMessageDialog(null, "Clicked б3"); } }
Приведенные выше примеры хорошо объяснены и не должны быть трудными для понимания. Надеюсь, примеры, описанные в этой статье, будут полезны каждому.