Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема в обработчике событий :( 
V
    Опции темы
Noviy
Дата 7.4.2008, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Пожалуйста, подскажите в чём заключается ошибка, при компиляции. Она одна и я не могу понять в чём дело. 
Мне нужно, что бы в поле адреса, с помощью обработчика событий, вводился адрес (Надеюсь я всё делаю правильно. 
Исходник прилагается.
Бок вот тут
//Обработчик для кнопки
        buttonGO.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                urlName.setText("http://www.seti.kr.ua");            
            }
        });  
Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.net.*;
import java.io.*;

public class JBros 
{
// Главное окно
    public static void main (String[] args)
        {
            Window frame = new Window();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
        
}

class Window extends JFrame 
{

    public Window()
    {
    
    // Определение размеров экрана
    
    Toolkit kit = Toolkit.getDefaultToolkit();
    Dimension screenSize = kit.getScreenSize();
    int screenHeight = screenSize.height;
    int screenWidth = screenSize.width;
    
    //=======================================================
    
    //Размещение фрейма по центру экрана
    
    setSize (screenWidth / 2, screenHeight / 2);
    setLocation (screenWidth / 4, screenHeight / 4);
    
    //========================================================
    
    //Установка пиктограммы и заголовка окна
    
        setTitle("JBros");
        Image img = kit.getImage("icon.gif");
        setIconImage(img);
        
    //=======================================================    
        
        // Меню
        JMenu fileMenu = new JMenu("File");
        //Подменю с обработкой событий        
        fileMenu.add(new AbstractAction("Close")
        {
            public void actionPerformed(ActionEvent event)
            {
                System.exit(0);
            }    
        });
        
        //Меню        
        JMenu helpMenu = new JMenu("Help");
        //Подменю с обработкой событий
        helpMenu.add(new AbstractAction("About")
        {
            public void actionPerformed(ActionEvent event)
            {
            HelpWin helpWin = new HelpWin();
            helpWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            helpWin.setVisible(true);
            }
        });
        // Добавления гл. меню.
        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);
        menuBar.add(fileMenu);
        menuBar.add(helpMenu);
        
        // Ст рока ввода адреса
        JLabel labelA = new JLabel("Adress:");
        JTextField urlName = new JTextField(20);
                
        
        //Кнопка с обработчиком событий
        JButton buttonGO = new JButton("GO");
        
      //Обработчик для кнопки
        buttonGO.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                urlName.setText("http://www.seti.kr.ua");            
            }
        });  
        
        
        JMenuBar adress = new JMenuBar();
        adress.add(labelA);
        adress.add(urlName);
        adress.add(buttonGO);
        add(adress, BorderLayout.NORTH);
        
        JEditorPane okno =new JEditorPane();
    }
    
}    
// Класс для окна Help
class HelpWin extends JFrame
{
    public HelpWin()
    {
    Toolkit kit = Toolkit.getDefaultToolkit();
    Dimension screenSize = kit.getScreenSize();
    int screenHeight = screenSize.height;
    int screenWidth = screenSize.width;
    setLocation (screenWidth / 4, screenHeight / 4);    
        
        JPanel panel = new JPanel();
        setTitle("About Program");
        Image img = kit.getImage("icon.gif");
        setIconImage(img);
        setSize(WIDTH, HEIGHT);
        panel.setVisible(true);
        
        JLabel label=new JLabel("  JBros; version 0.1t;  Pogoreliy Ihor;  contact: [email protected]");
        label.setFont(new Font("Arial",Font.BOLD, 14));
        add(label, BorderLayout.CENTER);
        
    }
    public static final int WIDTH = 425;
    public static final int HEIGHT = 100;
}        

/*class URLConnection
{
    public URLConnection
    {
        URLConnection connection = url.openConnection();
        setDoInput(true).
    */


Это сообщение отредактировал(а) Noviy - 7.4.2008, 13:55

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  JBros.java 3,23 Kb
PM MAIL ICQ   Вверх
Kangaroo
Дата 7.4.2008, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 15
Всего: 104



Сделайте urlName final
Код

final JTextField urlName = new JTextField(20);



--------------------
Lost....
PM MAIL MSN   Вверх
Noviy
Дата 7.4.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



обьясните пожалуйста, как и для чего используется final?
PM MAIL ICQ   Вверх
Kangaroo
Дата 7.4.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 15
Всего: 104



Вообще final делает переменную константной.

А в данном случае это нужно, потому что anonymous класс может обращаться только к файнал локальным переменным метода.

Добавлено через 2 минуты и 2 секунды
Блин, криво я что-то написал. Если непонятно - пишите, попробую еще раз  smile 


--------------------
Lost....
PM MAIL MSN   Вверх
math64
Дата 7.4.2008, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 5
Всего: 72



Кроме того, ошибки, которые не заметит компилятор:
Для HelpWin  DefaultCloseOperation = WindowConstants.DISPOSE_ON_CLOSE;
adress должен быть типа JPanel.
adress, okno должны добавляться не в окно, а в contentPane.
Тоже самое и с HelpWin.
PM   Вверх
Noviy
Дата 7.4.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



В практической реализации не получается реализовать DefaultCloseOperation = WindowConstants.DISPOSE_ON_CLOSE; - ошибка, или не туда вставил.

тип adress поменял на тип JPanel, однако не понял чем этот тип лучше?

Я написал JPanel contentPane; , а вот как в него добавить  adress хз. и нужно ли это?
 
smile 


 
PM MAIL ICQ   Вверх
math64
Дата 8.4.2008, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 5
Всего: 72



1. например в конструкторе HelpWin
Код
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

Возможно, что объявив adress как JMenuBar всё будет работать, но JMenuBar задуман как контейтер для меню и он не будет правильно работать в других версиях Swing (тем более что у тебя уже есть меню).
Код

JPanel contentPane = new JPanel(new BorderLayout());
setContentPane(contentPane);
contentPane.add(adress, BorderLayout.NORTH);
contentPane.add(okno, BorderLayout.CENTER);

PM   Вверх
Noviy
Дата 8.4.2008, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Я думал, что 
Код

add(adress, BorderLayout.CENTER);

добавит adress ниже области контейнера, 
Код

JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);
        menuBar.add(fileMenu);
        menuBar.add(helpMenu);

поскольку для добавления в контейнер нужно 
Код

menuBar.add(adress, BorderLayout.CENTER);


Поправте если не так smile
PM MAIL ICQ   Вверх
math64
Дата 8.4.2008, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 5
Всего: 72



Все Swing-овские окна (JWindow, JFrame, JDialog ...) уже содержат JRootPane, в котором находятся menuBar, contentPane и всё это закрыто сверху glassPane. Если ты  будешь добавлять что-то непосредственно в окно, ты нарушишь его правильную работу.
У JMenuBar свой собственный LayoutManager, поэтому menuBar.add(adress, BorderLayout.CENTER); работать не будет.
PM   Вверх
fixxer
Дата 8.4.2008, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 15
Всего: 27



Цитата(math64 @ 8.4.2008,  09:36)
Все Swing-овские окна (JWindow, JFrame, JDialog ...) уже содержат JRootPane, в котором находятся menuBar, contentPane и всё это закрыто сверху glassPane. Если ты  будешь добавлять что-то непосредственно в окно, ты нарушишь его правильную работу.

уже неправда начиная с java 5

так как в JFrame написано:

Код

protected void addImpl(Component comp, Object constraints, int index) 
    {
        if(isRootPaneCheckingEnabled()) {
            getContentPane().add(comp, constraints, index);
        }
        else {
            super.addImpl(comp, constraints, index);
        }
    }




--------------------
user posted image
PM MAIL ICQ   Вверх
Noviy
Дата 8.4.2008, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Всем спасибо smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0504 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.