1. Мониторинг событий
Тестовый код 1:
Пакет cn.javastudy.summary; import java.awt.*; import java.awt.event.*; }} класс myframetextfield extends frame {myframetextfield () {textfield tf = new TextField (); добавить (tf); tf.addactionListener (new Monitor3 ()); tf.seteChochar ('*'); / * * Этот метод SeteChoChar () должен установить символы, отображаемые при вводе в текстовое поле. Здесь он установлен на *, так что любой входной контент будет отображаться как *, но вы все равно можете видеть входное содержимое при печати */ setVisible (true); пакет(); }} Class Monitor3 реализует ActionListener { / * * Все методы в интерфейсе являются общедоступными (общедоступными) * Таким образом, при копировании void actionperformed (actionEvent e) из документа API вы должны добавить публику перед void * /public oction octiveperformed (actionevent e) { / * Соответствующая информация события инкалирована в объекте e. Соответствующая информация события может быть получена с помощью соответствующих методов объекта e*/ textfield tf = (textfield) e.getsource (); / * * method getsource () должен получить источник события. Примечание. Когда вы получаете этот источник события, * рассматривайте его как родительский класс Textfield. Определение метода GetSource (): «public Object getSource ()» возвращаемое значение - это объект объекта, * поэтому вы должны поднять его в объект Type Texfield * Если вы хотите получить доступ к объекту источника события другого класса в одном классе, вы можете использовать метод GetSource () */ System.out.println (tf.getText (); // tf.gettext (). tf.settext (""); // очистить содержимое в текстовом поле}} Тестовый код 2:
Пакет cn.javastudy.summary; import java.awt.*; импортировать java.awt.event.*; public class testactionevent2 {public static void main (string args []) {frame f = new Frame ("testactionEvent"); Кнопка btn1 = новая кнопка ("Start"); Кнопка btn2 = новая кнопка ("Stop"); Monitor2 M2 = новый Monitor2 (); // Создать объект прослушивания btn1.addactionListener (M2); /*Объект прослушивания прослушивает действия двух кнопок одновременно*/ btn2.addactionListener (M2); btn2.setActionCommand ("GameOver"); // Установите информацию о возврате после выполнения команды Click btn2 f.Add (btn1, borderlayout.north); f.Add (btn2, borderlayout.center); f.pack (); f.setvisible (true); }} Class Monitor2 реализует ActionListener {public void actionPerformed (actionEvent e) {System.out.println («Кнопка была нажата,«+»относительная информация:/n»+e.getActionCommand ()); /* Используйте возвращенный объект прослушивания E, чтобы вызвать метод getActionCommand (), чтобы получить информацию о возврате после того, как две кнопки выполняют команду Click. Согласно различной информации о возврате, какая кнопка является текущей операцией. BTN1 не использует метод setActionCommand () для установки, поэтому информация, возвращаемая BTN1, - это текст, отображаемый на кнопке*/}}2. Мониторинг событий Textfield
Тестовый код:
Пакет cn.javastudy.summary; import java.awt.*; import java.awt.event.*; }} класс myframetextfield extends frame {myframetextfield () {textfield tf = new TextField (); добавить (tf); tf.addactionListener (new Monitor3 ()); tf.seteChochar ('*'); / * * Этот метод SeteChoChar () должен установить символы, отображаемые при вводе в текстовое поле. Здесь он установлен на *, так что любой входной контент будет отображаться как *, но вы все равно можете видеть входное содержимое при печати */ setVisible (true); пакет(); }} Class Monitor3 реализует ActionListener { / * * Все методы в интерфейсе являются общедоступными (общедоступными) * Таким образом, при копировании void actionperformed (actionEvent e) из документа API вы должны добавить публику перед void * /public oction octiveperformed (actionevent e) { / * Соответствующая информация события инкалирована в объекте e. Соответствующая информация события может быть получена с помощью соответствующих методов объекта e*/ textfield tf = (textfield) e.getsource (); / * * method getsource () должен получить источник события. Примечание. Когда вы получаете этот источник события, * рассматривайте его как родительский класс Textfield. Определение метода GetSource (): «public Object getSource ()» возвращаемое значение - это объект объекта, * поэтому вы должны поднять его в объект Type Texfield * Если вы хотите получить доступ к объекту источника события другого класса в одном классе, вы можете использовать метод GetSource () */ System.out.println (tf.getText (); // tf.gettext (). tf.settext (""); // очистить содержимое в текстовом поле}} Реализация простого калькулятора с использованием класса Textfield
Пакет cn.javastudy.summary; импорт java.awt.*; импортировать java.awt.event.*; }}/* Здесь в основном для завершения макета элементов калькулятора*/class tfframe extends frame {tfframe () {/** Создать 3 текстовых поле и указывать их начальные размеры - 10 символов и 15 символов соответственно. Вот еще один метод строительства класса Textfield Public Textfield (INT) */ Textfield Num1 = New Textfield (10); Textfield num2 = новое текстовое поле (10); Textfield num3 = новое текстовое поле (15); /* Создать кнопку равного знака*/ кнопка btnequal = new Button ("="); btnequal.addactionListener (новый MyMonitor (num1, num2, num3)); /* Добавить слушатель в кнопку «Равное знак», чтобы событие ответа произошло после нажатия кнопки*/ label lblplus = new Label ("+"); /* "+" - это статический текст, поэтому используйте класс метки, чтобы создать статический текстовый объект*/ setlayout (new Flowlayout ()); /* Измените макет рамы по умолчанию на макет с FlowLayout*/ add (num1); добавить (lblplus); добавить (num2); добавить (btnequal); добавить (num3); пакет(); setVisible (true); }} класс MyMonitor реализует ActionListener {TextField Num1, num2, num3; / * * Чтобы включить прослушивание кнопок для работы на текстовых полях, * Следовательно, три объекта Textfield в пользовательском классе MyMonitor определены в Num1, Num2, Num3, * Это также определяет метод конструктора класса MyMonitor. Этот метод конструктора имеет три параметра типа Textfield, * используется для получения трех параметров типа текстового поля, передаваемых из класса TFFRAME *, затем присваивайте полученные три параметра типа текстового поля трем параметрам типа текста, объявленных в этом классе. Затем процесс num1, num2, num3 в методе ActionPerformed () */ public myMonitor (Textfield Num1, Textfield Num2, Textfield Num3) {this.num1 = num1; this.num2 = num2; this.num3 = num3; } public void actionPerformed (actionEvent e) { /* Соответствующая информация события инкапсулирована в объект e. Соответствующая информация о событии может быть получена с помощью соответствующих методов объекта e*/ int n1 = integer.parseint (num1.gettext ());/*num1 объект вызывает метод getText (), чтобы получить текстовую строку, отображаемую самим собой*/ int n2 = integer.parseint (num2.getText ());/*num2. (n1 + n2));/* num3 объект вызывает метод setText (), чтобы установить свой собственный текст отображения*/ num1.settext ("" "); / * После завершения расчета, очистите содержимое текстовых поля Num1 и Num2 */ num2.settext (""); // num3.settext (string.valueof ((n1+n2))); /* Когда строки соединены с любым типом данных, используя «+», строка должна быть строкой. * Вот пустая строка и номер типа Int, так что номер типа INT, полученный (N1+N2), может быть непосредственно преобразован в строку. * Это небольшая хитрость для преобразования других основных типов данных в строки. * Вы также можете использовать "string.valueof ((n1+n2))" для преобразования суммы (n1+n2) в строку */}} Классическое использование в Java: Удерживание ссылок на другой класс в одном классе
Пакет cn.javastudy.summary; import java.awt.*; import java.awt.event.*; public class testmath1 {public static void main (string args []) {new ttmyframe (). LaunchFrame (); /* Создать объект ttmyframe и вызовите метод lauchframe () для отображения формы калькулятора*/}}/* Сделать интерфейс формы калькулятора*/class ttmyframe extends frame {/* incaplule кода, создавая форму калькулятора в метод*/textfield num1, num2, num3; public void launchframe () {num1 = new Textfield (10); num2 = new Textfield (15); num3 = new Textfield (15); Метка lblplus = new Label ("+"); Кнопка btnequal = новая кнопка ("="); btnequal.addactionListener (new MyMonitorBtnequal (это)); setLayout (new FlowLayout ()); добавить (num1); добавить (lblplus); добавить (num2); добавить (btnequal); добавить (num3); пакет(); setVisible (true); }}/ * * Здесь, получив ссылку на класс TtmyFrame, а затем используя эту ссылку для доступа к переменным элемента в классе TTMyFrame * Этот подход намного лучше, чем предыдущий метод для непосредственного доступа к переменным элемента в классе TTMyFrame, * Теперь вам необходимо получить доступ к переменным участникам в классе TTMYFRAME, и вы можете получить непосредственные доступ к членам в классе. * Этот объект класса Ttmyframe похож на большую домработницу, и я сказал крупному домохозяйке, что хочу получить доступ к переменным участнику в классе Ttmyframe, * ссылка на большой домработница поможет мне найти его, и мне больше не нужно его найти. * Это использование придерживания ссылок на другой класс в одном классе представляет собой очень типичное использование* Используйте полученную ссылку для доступа к всем членам другого класса в одном классе*/класс MyMonitorBtNequal реализует ActionListener {ttmyFrame ttmf = null; public myMonitorBtnequal (ttmyframe ttmf) {this.ttmf = ttmf; } public void actionPerformed (actionEvent e) {int n1 = integer.parseint (ttmf.num1.getText ()); int n2 = integer.parseint (ttmf.num2.getText ()); ttmf.num3.settext ("" + (n1 + n2)); ttmf.num1.settext ("" "); ttmf.num2.settext ("" "); }}Результаты работы следующие:
Iii. Внутренний класс
Примеры внутренних классов:
Пакет cn.javastudy.summary; import java.awt.*; import java.awt.event.*; public class testmath3 {public static void main (string args []) {new mymathframe (). }} класс mymathframe extends frame {textfield num1, num2, num3; public void launchframe () {num1 = new Textfield (10); num2 = new Textfield (15); num3 = new Textfield (15); Метка lblplus = new Label ("+"); Кнопка btnequal = новая кнопка ("="); btnequal.addactionListener (new MyMonitor ()); setLayout (new FlowLayout ()); добавить (num1); добавить (lblplus); добавить (num2); добавить (btnequal); добавить (num3); пакет(); setVisible (true); } /** Этот класс MyMonitor является внутренним классом, который определяет класс MyFrame в классе MyFrame, называемый классом обертки* / /** Класс),* Вы можете напрямую доступ к нему в MyMonitor (внутренний класс)* Это эквивалентно внутреннему объекту класса, имеющему ссылку на внешний объект класса по умолчанию при создании внешнего объекта класса*/ частного класса, который MyMonitor реализует ActionListener {public void ActionPerformed (ActionEvent E) {int n1 = integer.parseint (num1.getText ()); int n2 = integer.parseint (num2.getText ()); num3.settext ("" + (n1 + n2)); num1.settext ("" "); num2.settext ("" "); }}}Огромные преимущества внутренних классов:
4. Графика
Тестовый код:
Пакет cn.javastudy.summary; import java.awt.*; public class testpaint {public static void main (String args []) {new MyPaint (). LaunchFrame (); /*Метод краски (графика G) не отображается в методе Main (), но после создания формы кадра вы можете видеть, что круги и прямоугольники нарисованы в форме кадра. Это потому, что метод Paint () является специальным методом. Он автоматически вызовет неявно при создании формы кадра. Когда мы сведем к минимуму форму кадра и снова откроем ее, мы снова вызотим метод Paint () и нарисуем круги и прямоугольники на форме рамы. То есть каждый раз, когда нам нужно перекрасить форму кадра, метод Paint () будет автоматически называется*/}} класс MyPaint Extends Frame {public void LaunchFrame () {setBounds (200,200,640,480); setVisible (true); } public void Paint (Graphics g) { / *Метод краски (графика G) имеет параметр графического типа G Мы можем рассматривать этот G как художник, художник держит кисть в руке, и мы нарисуем различные изображения, которые мы хотим, установив цвет и форму кисти * / / *Установите цвет кисти * / G.SetColor (цвет. Red); G.Filloval (100,100 100 100);/*Нарисуйте твердый эллипс*/ g.setcolor (color.green); G.FillRect (150,200 200);/*Нарисуйте твердый прямоугольник*//*Две строки кода ниже написаны для хороших привычек программирования в программах письма. Теперь вы должны восстановить начальный цвет кисти, которая эквивалентна очистке цвета на кисти после того, как художник подумал щетку*/ color c = g.getcolor (); g.setcolor (c); }}Результаты работы:
5. Адаптер событий мыши
Тестовый код:
пакет cn.galc.test; import java.awt.*; import java.awt.event.*; import java.util.*; public class mymouseadapter {public static void main (String args []) {new myframe ("рисунок ..."); }} класс myframe extends frame {arraylist points = null; MyFrame (String S) {super (s); points = new ArrayList (); setlayout (null); Setbounds (300 300,400 300); this.setbackground (новый цвет (204,204,255)); setVisible (true); this.AddMouseListener (новый монитор ()); } public void Paint (Graphics G) {итератор i = points.iterator (); while (i.hasnext ()) {point p = (точка) i.next (); g.setcolor (color.blue); G.Filloval (PX, PY, 10,10); }} public void AddPoint (точка P) {points.add (p); }} монитор класса Extens MouseAdapter {public void mousepressed (mouseevent e) {myframe f = (myframe) e.getsource (); f.addpoint (new Point (e.getx (), e.gety ())); f.Repaint (); }}6. Событие Windows
Тестовый код:
Пакет cn.galc.test; import java.awt.*; import java.awt.event.*; public class testwindowclose {public static void main (string args []) {new Windowframe ("Close Windowframe"); }} класс WindowFrame Extends Frame {public WindowsFrame (String S) {super (s); SetBounds (200,200,400 300); setlayout (null); Betbackground (новый цвет (204,204,255)); setVisible (true); this.addwindowlistener (new windowmonitor ());/*Слушайте действия этой формы, инкапсулируйте всю информацию о действиях в объект и передайте ее в класс прослушивания*/this.addwindowlistener (/*Определить класс в методе, этот класс называется локальным классом, также называемый анонимным. Класс как класс Windowdapter. System.Exit (-1); } /*Класс прослушивания также определяется как внутренний класс* /класс Windowmonitor Extends WindowDapter { /*windowdapter (адаптер окна) Класс реализует интерфейс прослушивания WindowListener. Переписывает все методы в интерфейсе Windowlistener. Если вы напрямую используете пользовательский класс Windowmonitor, чтобы напрямую реализовать интерфейс Windowlistener, вам необходимо переписать все методы в интерфейсе WindowListener. Но теперь вам нужно использовать только один из этих методов. Поэтому вы можете унаследовать подкласс интерфейса прослушивания Windowlistener и переписать метод, который вам необходимо использовать в этом подклассе. Этот метод намного проще и удобнее, чем непосредственно реализовывать интерфейс прослушивания Windowlistener. */*Переписывает метод WindowClasing (WindowEvent E), который необходимо использовать*//**Public Void WindowClose (WindowEvent e) {setVisible (false);/*Установите форму, чтобы не отображать, а форма закрыта*/system.exit (0);/*Обычно*/}}}7. Событие ответа клавиатуры - KeyEvent
Тестовый код:
пакет cn.galc.test; import java.awt.*; import java.awt.event.*; public class testkeyevent {public static void main (string args []) {new KeyFrame ("Событие ответа клавиатуры"); }} класс класса extends frame {public KeyFrame (String S) {super (s); SetBounds (200,200,400 300); setlayout (null); setVisible (true); addKeyListener (new KeyMonitor ()); } /*Определите пользовательский класс прослушивания клавиатуры как внутренний класс. Этот класс прослушивания наследует от класса клавишного адаптера. Унаждается классом KeyDapter. Чтобы быть кратким и удобным, вам нужно только переписать методы, необходимые для использования. Этот метод проще и удобнее, чем непосредственно реализовывать интерфейс KeyListener. Если вы напрямую реализуете интерфейс KeyListener, вам нужно переписать все методы в интерфейсе KeyListener, но действительно используется только один метод. Таким образом, переписывание других методов, но не использование их неизбежно выполняет бесполезную работу*/ class keymonitor Extens KeyAdapter {public void Keypressed (KeyEvent E) {int keyCode = e.getKeyCode (); /*Используйте метод getKeyCode () для получения виртуального кода клавиши* / /*Если виртуальный код полученной клавиши равен виртуальному коду клавиши UP, это означает, что нажатая в настоящее время клавиша - клавиша UP -ключа. VK_UP означает, что виртуальный код получения клавиши UP. Каждый ключ на клавиатуре соответствует виртуальному коду. Эти виртуальные коды определяются как статические постоянные в классе KeyEvent. Следовательно, вы можете использовать форму «Имя класса. Статическое постоянное имя» для доступа к этим статическим константам*/ if (keycode == keyevent.vk_up) {System.out.println («Вы нажимаете клавишу вверх»); }}}}/*Клавиатура обрабатывает события, такие как это: каждая клавиша соответствует виртуальному коду. Когда нажата определенная клавиша, система найдет виртуальный код, соответствующий этой клавиш, чтобы определить, какой клавишу в настоящее время нажимается*/Через эту статью я изучил с вами программирование GUI. Я надеюсь, что у вас будет более полное понимание программирования GUI. Есть больше, чем это о программировании графического интерфейса, и вам нужно продолжать учиться.