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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Невидит переменную определённую в методе в упор :( 
V
    Опции темы
kaa
Дата 12.4.2008, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Господа, что-то то-ли я так туплю, то-ли просто знаний еще мало, но есть проблема.


Код

class MainPanel extends JPanel{
    private Editor edit;
    private JButton Bold, Red, Underline, Italic;
    private JLabel label;
    private JMenuBar officialMenu, editorMenu;
    
    public MainPanel(){
        super();
        this.edit = new Editor();
        
        CreateMenu();
        
        this.Bold = new ButtonWrapper("Bold", "bold");
        this.Red = new ButtonWrapper("Red", "red");
        this.Underline = new ButtonWrapper("Underline", "underline");
        this.Italic = new ButtonWrapper("Italic", "italic");
        this.label = new JLabel("undefined");
        this.edit = new Editor();
        this.Bold.addActionListener(new ButtonClickHandler(this));
        this.Red.addActionListener(new ButtonClickHandler(this));
        this.Underline.addActionListener(new ButtonClickHandler(this));
        this.Italic.addActionListener(new ButtonClickHandler(this));
        
        add(this.edit);
        //add(this.officialMenu);
    }
    
    public Editor getEdit(){
        return edit;
    }
    
    private void CreateMenu(){
        //Набираем служебное меню
        JMenu menu = new JMenu("Default menu");
        this.officialMenu.add(menu);
        //Набираем меню редактора
    }
}


Вываливает ексепшн:
Код

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at MainPanel.CreateMenu(Main.java:129)
        at MainPanel.<init>(Main.java:105)
        at EditFrame.<init>(Main.java:63)
        at Main.<init>(Main.java:28)
        at Main$1.run(Main.java:39)
.......


Вот в этой функции спотыкается, в упор невидит переменную menu:
Код

private void CreateMenu(){
        //Набираем служебное меню
        JMenu menu = new JMenu("Default menu");
        this.officialMenu.add(menu);
        //Набираем меню редактора
    }



Почиму?
PM MAIL   Вверх
Samotnik
Дата 12.4.2008, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



kaa,  весь код пажалста, что б можно было потестить 
PM MAIL   Вверх
kaa
Дата 12.4.2008, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

/*
 * Main.java
 *
 * Created on 6 Апрель 2008 г., 20:05
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

//package javaedit;
import java.lang.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.tree.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;

/**
 *
 * @author zmei
 */
public class Main {
    
    /** Creates a new instance of Main */
    public Main() {
        new EditFrame();
    }
    
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(
                new Runnable(){
                        public void run(){
                          new Main();  
                        }
                    }
                );
    }
    
}

/**
 *Описываем класс окна
 */
class EditFrame extends JFrame{
    
    TreePanel treePanel;
    MainPanel mainPanel;
    
    
  public EditFrame(){
       this.setTitle("Editor window");
       this.setSize(500, 500);
       this.setDefaultCloseOperation(EXIT_ON_CLOSE);
       setLayout(new BorderLayout(10,10));
       
       this.treePanel = new TreePanel();
       this.mainPanel = new MainPanel();
              
       add(this.treePanel, BorderLayout.WEST);
       add(this.mainPanel, BorderLayout.EAST);
       this.setVisible(true);
   }
} 


/**
 * Определяем панель, которая будет содержать дерево объектов системы тестов.
 **/
class TreePanel extends JPanel{
   private JTree treeTest;
   private DefaultMutableTreeNode tempNode;
   
   public TreePanel(){
       super();
       this.tempNode = new DefaultMutableTreeNode("Структура");
       this.treeTest = new JTree(tempNode);
       add(new JScrollPane(this.treeTest));
   }
}


/**
 * Определяем панель, которая будет содержать редактор и другие органы управления.
 *Панель содержит меню с кнопками "Догбавить", "Сохранить", "Удалить". Это меню 
 *будем называть служебным
 *Меню с кнопка для редактора "Подчеркнуть", "Цвет", "Установить жирный шрифт", "Вставить"
 *"Копировать". Это меню будем называть меню редактора.
 **/
class MainPanel extends JPanel{
    private Editor edit;
    private JButton Bold, Red, Underline, Italic;
    private JLabel label;
    private JMenuBar officialMenu, editorMenu;
    
    public MainPanel(){
        super();
        this.edit = new Editor();
        
        CreateMenu();
        
        this.Bold = new ButtonWrapper("Bold", "bold");
        this.Red = new ButtonWrapper("Red", "red");
        this.Underline = new ButtonWrapper("Underline", "underline");
        this.Italic = new ButtonWrapper("Italic", "italic");
        this.label = new JLabel("undefined");
        this.edit = new Editor();
        this.Bold.addActionListener(new ButtonClickHandler(this));
        this.Red.addActionListener(new ButtonClickHandler(this));
        this.Underline.addActionListener(new ButtonClickHandler(this));
        this.Italic.addActionListener(new ButtonClickHandler(this));
        
        add(this.edit);
        //add(this.officialMenu);
    }
    
    public Editor getEdit(){
        return edit;
    }
    
    private void CreateMenu(){
        //Набираем служебное меню
        JMenu menu = new JMenu("Default menu");
        this.officialMenu.add(menu);
        //Набираем меню редактора
    }
}


/**
 *Описываем класс редактора
 */
class Editor extends JTextPane{
    public Editor(){
        this.setSize(100, 100);
    }
}


/*class ButtonClickHandler extends MouseAdapter{
    EditFrame EditFrame;
    public ButtonClickHandler(EditFrame frameObj){
        this.EditFrame = frameObj;
    }
    
    public void mouseClicked(MouseEvent ev){
       this.EditFrame.label.setText(ev.paramString());
    }
}*/
/**
 *Описываем класс добавляющий в кнопку еще один аттрибут
 */
class ButtonWrapper extends JButton{
    private String commandString;
    
    public ButtonWrapper(String name, String command){
        super(name);
        this.commandString = command;
    }
    
    public String getCommandString(){
      return this.commandString;
    }
}

/**
 *Описываем класс-обработчик кнопок
 */
class ButtonClickHandler implements ActionListener{
    private MainPanel MainPanel;
    private Editor edit;
    private StyledDocument EditDoc;
    private int startSelect, endSelect, length;
    private Style bold, underline, red, italic;
    private String str, command;
    private ButtonWrapper sourceButton;
    
    /**
     *@param containerEdit.
     *объект-контейнер, содержащий редактор текста.
     */
    public ButtonClickHandler(MainPanel containerEdit){
        this.MainPanel = containerEdit;
        this.edit = containerEdit.getEdit();
               
            this.EditDoc = this.edit.getStyledDocument();
            bold = this.EditDoc.addStyle("bold", null);
            underline = this.EditDoc.addStyle("underline", null);
            red = this.EditDoc.addStyle("red",null);
            italic = this.EditDoc.addStyle("italic",null);
            StyleConstants.setBold(bold, true);
            StyleConstants.setForeground(red, Color.RED);
            StyleConstants.setUnderline(underline, true);
            StyleConstants.setItalic(italic, true);      
    }
    
    public void actionPerformed(ActionEvent ae){
        
            //this.MainPanel.label.setText(ae.getActionCommand());
            this.sourceButton = (ButtonWrapper)ae.getSource();
            this.command = sourceButton.getCommandString();
            this.startSelect = this.edit.getSelectionStart();
            this.endSelect = this.edit.getSelectionEnd();
            this.length = endSelect-startSelect;
            if(length!=0){
                if(this.command=="underline"){
                    this.EditDoc.setCharacterAttributes(this.startSelect, length, underline, false);
                }
                else if(command=="bold"){
                    this.EditDoc.setCharacterAttributes(this.startSelect, length, bold, false);
                }
                else if(command=="red"){
                    this.EditDoc.setCharacterAttributes(this.startSelect, length, red, false);
                }
                else if(command=="italic"){
                    this.EditDoc.setCharacterAttributes(this.startSelect, length, italic, false);
                }
        }
  
    }
}

PM MAIL   Вверх
v2v
Дата 12.4.2008, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(kaa @  12.4.2008,  20:56 Найти цитируемый пост)
    private JMenuBar officialMenu, editorMenu;

а где ты создаешь  officialMenu ?? 
надо же сказать : officialMenu = new Menu ... не так ли ;)


--------------------
PM   Вверх
Samotnik
Дата 12.4.2008, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Код

import javax.swing.*;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import javax.swing.tree.DefaultMutableTreeNode;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Tool {

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

/**                                                 `
 * Описываем класс окна
 */
class EditFrame extends JFrame {

    TreePanel treePanel;
    MainPanel mainPanel;


    public EditFrame() {
        this.setTitle("Editor window");
        this.setSize(500, 500);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new BorderLayout(10, 10));

        this.treePanel = new TreePanel();
        this.mainPanel = new MainPanel();

        add(this.treePanel, BorderLayout.WEST);
        add(this.mainPanel, BorderLayout.EAST);
        this.setVisible(true);
    }
}


/**
 * Определяем панель, которая будет содержать дерево объектов системы тестов.
 */
class TreePanel extends JPanel {
    private JTree treeTest;
    private DefaultMutableTreeNode tempNode;

    public TreePanel() {
        super();
        this.tempNode = new DefaultMutableTreeNode("Структура");
        this.treeTest = new JTree(tempNode);
        add(new JScrollPane(this.treeTest));
    }
}


/**
 * Определяем панель, которая будет содержать редактор и другие органы управления.
 * Панель содержит меню с кнопками "Догбавить", "Сохранить", "Удалить". Это меню
 * будем называть служебным
 * Меню с кнопка для редактора "Подчеркнуть", "Цвет", "Установить жирный шрифт", "Вставить"
 * "Копировать". Это меню будем называть меню редактора.
 */
class MainPanel extends JPanel {
    private Editor edit;
    private JButton Bold, Red, Underline, Italic;
    private JLabel label;
    private JMenuBar officialMenu = new JMenuBar(); 
            private JMenuBar editorMenu;

    public MainPanel() {
        super();
        this.edit = new Editor();

        CreateMenu();

        this.Bold = new ButtonWrapper("Bold", "bold");
        this.Red = new ButtonWrapper("Red", "red");
        this.Underline = new ButtonWrapper("Underline", "underline");
        this.Italic = new ButtonWrapper("Italic", "italic");
        this.label = new JLabel("undefined");
        this.edit = new Editor();
        this.Bold.addActionListener(new ButtonClickHandler(this));
        this.Red.addActionListener(new ButtonClickHandler(this));
        this.Underline.addActionListener(new ButtonClickHandler(this));
        this.Italic.addActionListener(new ButtonClickHandler(this));

        add(this.edit);
        //add(this.officialMenu);
    }

    public Editor getEdit() {
        return edit;
    }

    private void CreateMenu() {
        //Набираем служебное меню
        JMenu menu = new JMenu("Default menu");
        this.officialMenu.add(menu);
        //Набираем меню редактора
    }
}


/**
 * Описываем класс редактора
 */
class Editor extends JTextPane {
    public Editor() {
        this.setSize(100, 100);
    }
}


/*class ButtonClickHandler extends MouseAdapter{
    EditFrame EditFrame;
    public ButtonClickHandler(EditFrame frameObj){
        this.EditFrame = frameObj;
    }

    public void mouseClicked(MouseEvent ev){
       this.EditFrame.label.setText(ev.paramString());
    }
}*/
/**
 * Описываем класс добавляющий в кнопку еще один аттрибут
 */
class ButtonWrapper extends JButton {
    private String commandString;

    public ButtonWrapper(String name, String command) {
        super(name);
        this.commandString = command;
    }

    public String getCommandString() {
        return this.commandString;
    }
}

/**
 * Описываем класс-обработчик кнопок
 */
class ButtonClickHandler implements ActionListener {
    private MainPanel MainPanel;
    private Editor edit;
    private StyledDocument EditDoc;
    private int startSelect, endSelect, length;
    private Style bold, underline, red, italic;
    private String str, command;
    private ButtonWrapper sourceButton;

    public ButtonClickHandler(MainPanel containerEdit) {
        this.MainPanel = containerEdit;
        this.edit = containerEdit.getEdit();

        this.EditDoc = this.edit.getStyledDocument();
        bold = this.EditDoc.addStyle("bold", null);
        underline = this.EditDoc.addStyle("underline", null);
        red = this.EditDoc.addStyle("red", null);
        italic = this.EditDoc.addStyle("italic", null);
        StyleConstants.setBold(bold, true);
        StyleConstants.setForeground(red, Color.RED);
        StyleConstants.setUnderline(underline, true);
        StyleConstants.setItalic(italic, true);
    }

    public void actionPerformed(ActionEvent ae) {

        //this.MainPanel.label.setText(ae.getActionCommand());
        this.sourceButton = (ButtonWrapper) ae.getSource();
        this.command = sourceButton.getCommandString();
        this.startSelect = this.edit.getSelectionStart();
        this.endSelect = this.edit.getSelectionEnd();
        this.length = endSelect - startSelect;
        if (length != 0) {
            if (this.command == "underline") {
                this.EditDoc.setCharacterAttributes(this.startSelect, length, underline, false);
            } else if (command == "bold") {
                this.EditDoc.setCharacterAttributes(this.startSelect, length, bold, false);
            } else if (command == "red") {
                this.EditDoc.setCharacterAttributes(this.startSelect, length, red, false);
            } else if (command == "italic") {
                this.EditDoc.setCharacterAttributes(this.startSelect, length, italic, false);
            }
        }

    }

}


Это сообщение отредактировал(а) Samotnik - 12.4.2008, 22:15
PM MAIL   Вверх
kaa
Дата 13.4.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Мдя... Проглядел smile


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

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

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


 




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


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

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