Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Кнопка на Яве


Автор: Syltan 21.6.2010, 18:22
Хотел уточнить пару непонятных моментов по коду:
Код

package uu;
import java.awt.*; //Для размещения компонентов на фрейме
import java.awt.event.*; //Определяет интерфейс ActionListener и класс Actionevent
import javax.swing.*;

class Main{
    JLabel jlab;
    Main(){

    JFrame obj = new JFrame("Привет моё окно Ява");
    obj.setLayout(new FlowLayout());
    obj.setSize(220,90);
    //Для того чтоб убрать из процессов после закрыти окна программы
    obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   //Создаю 2 кнопки
    JButton n1 = new JButton("Начало");
    JButton n2 = new JButton("Конец");
    n1.addActionListener(new ActionListener(){
        //Этот метод вызывается в результате щелчка на кнопке
        public void actionPerformed(ActionEvent ae){
         jlab.setText("Нажата кнопка №1");
        }
    });

    n2.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            jlab.setText("Нажата кнопка №2");
        }
    });
    obj.add(n1);
    obj.add(n2);
    jlab = new JLabel("Нажмите кнопку");
    obj.add(jlab);
    obj.setVisible(true);
    }

    public static void main(String[] args) {
       SwingUtilities.invokeLater(new Runnable(){
           public void run(){
               new Main();
           }
      });
    }
}



1) Что означает ActionEvent ae? Что Такое ActionEvent и что такое ае, что попадает в ае, в этот параметр?
2) Что такое new Runnable() зачем оно нужно в главной функции меин?
3)Вот эту строку n2.addActionListener(new ActionListener() прокоментируйте пожалуйста, не понятно что здесь происходит.

Заранее благодарю.

Автор: jk1 21.6.2010, 20:08
Цитата

n2.addActionListener(new ActionListener()

Этой строкой добавляется обработчик событий, которые генерирует компонент. Например у кнопки это будет нажатие на кнопку. Обработчиков можно добавлять любое количество и каждый из них будет извещен о том, что кнопка нажата. При этом у обработчика будет вызван метод actionPerformed(ActionEvent ae). ActionEvent в данном случае содержит информацию о том, какой объект был источником события и когда оно произошло. 
На самом деле в Swing реализовано большое количество самых разных событий и классов-обработчиков. Подробнее об обработке событий в Swing читайте http://java.sun.com/docs/books/tutorial/uiswing/events/index.html.
Цитата

Что такое new Runnable() зачем оно нужно в главной функции меин

Все дело в том, что Swing по своей природе однопоточен и всю работу с его компонентами надо производить в специальном потоке, который называется EDT. Вот этот код
Код

SwingUtilities.invokeLater(new Runnable(){
           public void run(){
               new Main();
           }
      });

Заставляет выполнить содержимое метода Run в том самом потоке. Если это ограничение не соблюдать, возможно появление труднопредсказуемых неповторяемых ошибок в самых неожиданных местах.

Автор: major32 9.7.2010, 20:43
Код

    public static void main(String args[]) {
 
        Thread thr = new Thread();
        thr.start();

    }

    public void run() {
        this.setVisible(true);
    }

Автор: vatuska 19.9.2010, 17:55
Доброго времени суток, в java новичок, платформа NetBeans 6.9.1. Что нужно написать в обработчике нажатия на кнопку, чтобы после нажатия окно закрылось? Помимо этого в обработчике выполняются ещё некоторые действия. 

Автор: mstalker26 19.9.2010, 20:50
смотря какое окно, setVisible(false) думаю должно хватить.

Автор: armixx 19.9.2010, 21:27
Добрый вечер.
Закрыть или уничтожить?
У меня есть окна ( диалоги), которые я гашу и открываю по setVisible.
Если прекратить работу, то - dispose();
Примерно так:
    new JButton().addActionListener
    (new ActionListener()
     {
        public void actionPerformed(ActionEvent ae)
        {
            ...
            window.dispose();
         }
      });


Дополнительно:
при этом вызывается WindowListener() и передаётся WindowEvent в 
метод windowClosing, в котором можно обработать закрытие окна).
Примечание:
Вместо WindowListener() проще использовать WindowAdapter(), у которого достаточно перекрыть только требуемый метод.
   Процедура добавления слушателя "окна" может выглядеть так:
   
   window.addWindowListener(new WindowAdapter()
   {
      @Override
      public void windowClosing(WindowEvent e)
      {
         // Нас хотят закрыть.         
       }
    
      @Override     
       public void windowClosingWindowEvent e)
       {
          // Нас закрыли.
        }     
     });

Добавлено через 1 минуту и 48 секунд
Виноват!
2-й метод:
public void windowClosed(WindowEvent e)
 

Автор: Su_ 19.9.2010, 22:56
Если отдельная кнопка то:

Код

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);        // TODO add your handling code here:
    }



Если кнопка-крестик, то через Adapter как описал armixx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)