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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JFileChooser Listeners. 
:(
    Опции темы
ShurikA
Дата 12.11.2005, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



Цитата(LSD @ 12.11.2005, 20:02)
У меня тоже не сразу все получается, главное пытаться

У меня на самом деле пока не хватает опыта ...


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
ShurikA
Дата 13.11.2005, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



Решил всё переписать по новой, и появились новые беды.
Вот то что пока есть:
Код

package imageuploader;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.io.File;


public class ImageUploader extends JApplet {
    boolean isStandalone = false;
    BorderLayout borderLayout1 = new BorderLayout();
    MyJFileChooser fileChooser;
    FileListModel dirFileList, choosenFileList;
    JTextField tf;
    
    //Get a parameter value
    public String getParameter(String key, String def) {
        return isStandalone ? System.getProperty(key, def) :
                (getParameter(key) != null ? getParameter(key) : def);
    }

    //Construct the applet
    public ImageUploader() {
    }

    //Initialize the applet
    public void init() {
        try {
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //Component initialization
    private void jbInit() throws Exception {
        this.setSize(new Dimension(600, 800));
        this.getContentPane().setLayout(borderLayout1);
        
        fileChooser = new MyJFileChooser();
        tf = new JTextField(30);
        
        fileChooser.addPropertyChangeListener(fileChooser.SELECTED_FILE_CHANGED_PROPERTY, new PropertyChangeListener()
                {
                    public void propertyChange(PropertyChangeEvent evt)
                    {
                        tf.setText((String)evt.getNewValue());
                    }
                });
        JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, fileChooser, tf);
        add(splitPane);

    }

    //Get Applet information
    public String getAppletInfo() {
        return "Applet Information";
    }

    //Get parameter info
    public String[][] getParameterInfo() {
        return null;
    }

    //static initializer for setting look & feel
    static {
        try {
            //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            //UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
        } catch (Exception e) {
        }
    }
}


и так же:
Код

package imageuploader;

import javax.swing.JFileChooser;

public class MyJFileChooser extends JFileChooser 
{
    JFileChooser jFileChooser;
    
    public MyJFileChooser() 
    {
        jFileChooser = new JFileChooser();
        jFileChooser.setMultiSelectionEnabled(false);
        jFileChooser.setFileSelectionMode(jFileChooser.DIRECTORIES_ONLY);
        jFileChooser.setControlButtonsAreShown(false);
    }
}


1. Объект fileChooser не принимает установки которые я ему даю в классе MyJFileChooser.
2. Пытаюсь прагнать, бежит пока не отмечаю директорию. На это он выдаёт ошибку:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at imageuploader.ImageUploader$1.propertyChange(ImageUploader.java:65)


У меня какая то дыра в понимании... smile
Добавлено @ 21:34
Вроде как 2-е связанно с 1-ым.


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
batigoal
Дата 13.11.2005, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Мне кажется, ты не совсем понимаешь концепцию наследования. Я бы переписал твой класс так:
Код

package imageuploader;

import javax.swing.JFileChooser;

public class MyJFileChooser extends JFileChooser 
{
    public MyJFileChooser() 
    {
        super();
        this.setMultiSelectionEnabled(false);
        this.setFileSelectionMode(jFileChooser.DIRECTORIES_ONLY);
        this.setControlButtonsAreShown(false);
    }
}



--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
ShurikA
Дата 13.11.2005, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



Цитата(Lamer @ 13.11.2005, 20:56)
Мне кажется, ты не совсем понимаешь концепцию наследования.

есть децл smile
спасибо


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
ShurikA
Дата 15.11.2005, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



Следующая беда. Игрался с этим очень долго.
...

init()
Код

.
.
.
        tf = new JTextField(30);
        fileChooser = new MyJFileChooser();
        dirFileList = new FileListModel();
        dirFileList.getList().addListSelectionListener(new ListSelectionListener()
        {
            public void valueChanged(ListSelectionEvent e)
            {
                  JList list = (JList) e.getSource();
                  File file = (File) list.getSelectedValue();
                  
                  tf.setText(file.getName());
            }
        });

        fileChooser.addPropertyChangeListener(fileChooser.SELECTED_FILE_CHANGED_PROPERTY, new PropertyChangeListener()
                {
                    public void propertyChange(PropertyChangeEvent evt)
                    {
                        JFileChooser ch = (JFileChooser) evt.getSource();
                        dirFileList.Renew((File)ch.getSelectedFile());
                    }
                });
.
.
.


Код

public class FileListModel extends JList
{
    private JList fList;
    private DefaultListModel listModel = new DefaultListModel();
    
    public FileListModel()
    {
        this(new File(System.getProperty( "user.home" )));
    }
    
    public FileListModel(File dir) 
    {
        buildList(dir);
    }

    /**
     * buildList
     *
     * @param dir File
     */
    private void buildList(File dir) 
    {
        File[] listFiles = dir.listFiles();
        for(int i=0; i<listFiles.length; i++)
        {
            if(accept(listFiles[i]))
            {
                listModel.addElement(listFiles[i]);
            }
        }

    }

    //Renew the list
    public void Renew(File dir)
    {
        if(listModel.size() != 0)
        {
            listModel.removeAllElements();
        }
        buildList(dir);
    }
    
    //Do we accept this file?
    private boolean accept(File f)
    {
        String extension = getExtension(f);

        if (extension != null)
        {
            if (extension.equals("tiff") ||
                extension.equals("tif") ||
                extension.equals("gif") ||
                extension.equals("jpeg") ||
                extension.equals("jpg") ||
                extension.equals("png"))
            {
                return true;
            }
        }
        return false;
    }
    
    //Get the extension of a file.
    private String getExtension(File f)
    {
        String ext = null;
        String s = f.getName();
        int i = s.lastIndexOf('.');

        if (i > 0 && i < s.length() - 1)
        {
            ext = s.substring(i + 1).toLowerCase();
        }
         return ext;
    }
    
    public JList getList()
    {
        if(fList==null)
            fList = new JList(listModel);
        return  fList;
    }
}


Всё хорошо работает, пока я не отмечаю что то в dirFileList, после этого если я хочу выбрать другую библиотеку в fileChooser сразу выдаёт ошибку:
Код

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at imageuploader.ImageUploader$1.valueChanged(ImageUploader.java:69)
    at javax.swing.JList.fireSelectionValueChanged(JList.java:1317)
    at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1331)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:187)
.
.
.



--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
LSD
Дата 15.11.2005, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Приведи стек ошибки полностью.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ShurikA
Дата 15.11.2005, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



Код

C:\Borland\JBuilder2006\jdk1.5\bin\javaw -classpath "C:\Documents and Settings\Alex\jbproject\ImageUploader\classes;C:\Borland\JBuilder2006\jdk1.5\lib\htmlconverter.jar;C:\Borland\JBuilder2006\jdk1.5\lib\tools.jar;C:\Borland\JBuilder2006\jdk1.5\lib\jconsole.jar;C:\Borland\JBuilder2006\jdk1.5\lib\dt.jar;C:\Borland\JBuilder2006\jdk1.5\jre\lib\deploy.jar;C:\Borland\JBuilder2006\jdk1.5\jre\lib\rt.jar;C:\Borland\JBuilder2006\jdk1.5\jre\lib\jce.jar;C:\Borland\JBuilder2006\jdk1.5\jre\lib\jsse.jar;C:\Borland\JBuilder2006\jdk1.5\jre\lib\ext\sunjce_provider.jar;C:\Borland\JBuilder2006\jdk1.5\jre\lib\ext\dnsns.jar;C:\Borland\JBuilder2006\jdk1.5\jre\lib\ext\sunpkcs11.jar;C:\Borland\JBuilder2006\jdk1.5\jre\lib\ext\localedata.jar;C:\Borland\JBuilder2006\jdk1.5\jre\lib\charsets.jar;C:\Borland\JBuilder2006\jdk1.5\jre\lib\im\thaiim.jar;C:\Borland\JBuilder2006\jdk1.5\jre\lib\im\indicim.jar;C:\Borland\JBuilder2006\jdk1.5\jre\lib\javaws.jar;C:\Borland\JBuilder2006\jdk1.5\jre\lib\plugin.jar;C:\Borland\JBuilder2006\lib\jbuilder.jar;C:\Borland\JBuilder2006\lib\primetime.jar"  com.borland.jbuilder.runtime.applet.AppletTestbed 600 800 imageuploader.ImageUploader
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at imageuploader.ImageUploader$1.valueChanged(ImageUploader.java:69)
    at javax.swing.JList.fireSelectionValueChanged(JList.java:1317)
    at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1331)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:187)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:214)
    at javax.swing.DefaultListSelectionModel.removeIndexInterval(DefaultListSelectionModel.java:611)
    at javax.swing.plaf.basic.BasicListUI$Handler.intervalRemoved(BasicListUI.java:2197)
    at javax.swing.AbstractListModel.fireIntervalRemoved(AbstractListModel.java:161)
    at javax.swing.DefaultListModel.removeAllElements(DefaultListModel.java:385)
    at imageuploader.FileListModel.Renew(FileListModel.java:58)
    at imageuploader.ImageUploader$2.propertyChange(ImageUploader.java:78)
    at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:333)
    at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:341)
    at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:270)
    at java.awt.Component.firePropertyChange(Component.java:7159)
    at javax.swing.JFileChooser.setSelectedFile(JFileChooser.java:475)
    at javax.swing.plaf.basic.BasicFileChooserUI$Handler.valueChanged(BasicFileChooserUI.java:511)
    at javax.swing.JList.fireSelectionValueChanged(JList.java:1317)
    at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1331)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:187)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:157)
    at javax.swing.DefaultListSelectionModel.setValueIsAdjusting(DefaultListSelectionModel.java:619)
    at javax.swing.JList.setValueIsAdjusting(JList.java:1671)
    at javax.swing.plaf.basic.BasicListUI$Handler.mouseReleased(BasicListUI.java:2348)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:232)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)
    at java.awt.Component.processMouseEvent(Component.java:5488)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
    at java.awt.Component.processEvent(Component.java:5253)
    at java.awt.Container.processEvent(Container.java:1966)
    at java.awt.Component.dispatchEventImpl(Component.java:3955)
    at java.awt.Container.dispatchEventImpl(Container.java:2024)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
    at java.awt.Container.dispatchEventImpl(Container.java:2010)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)




--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
batigoal
Дата 15.11.2005, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



ShurikA
Соответственно, в строке 69 в твоем первом файле какая-то из ссылок равна null. Какая это строка?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
ShurikA
Дата 15.11.2005, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



Код

tf.setText(file.getName());

Добавлено @ 14:23
То как я понимаю:
при выборе новой библиотеки в fileChooser dirFileList это понимает как valueChanged, так как он действительно меняется, но на ничто...
Пробовал перед обработкой propertyChange сделать clearSelection в dirFileList - не помогло.


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
batigoal
Дата 15.11.2005, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Значит, либо tf=null, либо file=null.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
ShurikA
Дата 15.11.2005, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



Цитата(Lamer @ 15.11.2005, 13:23)
Значит, либо tf=null, либо file=null.

по видимому file так как он приходит из ListSelectionEvent e, а у него нет NewValuew.
Но как с этим бороться?


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
LSD
Дата 15.11.2005, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Lamer @ 15.11.2005, 14:23)
Значит, либо tf=null, либо file=null.

Нет, ни tf ни file не null, т.к. если бы они были null то стек вызовов бы на этом месте и заканчивался, а он идет дальше. Или file.getName() возвращает null или некое недопустимое значение, которое tf.setText() не может переварить. Поставь отладочную печать, что возвращает file.getName().


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ShurikA
Дата 15.11.2005, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



Проблемма в ListSelectionEvent e, и file.getName() тут не причём.
Ещё раз:
если в dirFileList ничего не отмеченно - всё ОК, в fileChooser можно отмечать что угодно другое и при этом список обновляется.
если же отметить сто то в dirFileList, то есть фукция public void valueChanged(ListSelectionEvent e) один раз отработала, то при любом другом выборе директории в fileChooser выдаётся выше указанная ошибка.


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
batigoal
Дата 15.11.2005, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Цитата(LSD @ 15.11.2005, 16:37)
Нет, ни tf ни file не null, т.к. если бы они были null то стек вызовов бы на этом месте и заканчивался, а он идет дальше.

Не понял. Ведь он этим и обрывается:
Цитата
at imageuploader.ImageUploader$1.valueChanged(ImageUploader.java:69)

Поясни, плиз.


ShurikA
Может, ошибка такого рода (я не очень внимательно смотрел код): когда ты выбираешь файл, у тебя пересоздается список (методом Renew), но вместо каталога подставляется твой файл? А потом, соответственно, получается неправильный путь. Вообще, я не очень понимаю, почему при выборе файла (addPropertyChangeListener(fileChooser.SELECTED_FILE_CHANGED_PROPERTY...)) выполняется обновление списка файлов (dirFileList.Renew(...)).

Это сообщение отредактировал(а) Lamer George - 15.11.2005, 17:13


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
ShurikA
Дата 15.11.2005, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



Lamer George
Представь себе такое:

fileChooser - откофигурирован так что бы показывал только директории, при этом если отметить директорию в fileChooser (не важно какую), в другой части апплета появляется список графических фаилов находящихся в той самой отмеченной директории с помощью dirFileList.Renew. То есть: fileChooser и dirFileList это разные вещи, в разных частях апплета.

теперь...
если в этом присловутом dirFileList ничего не отмечать и бегать по разным дерикториям в fileChooser то dirFileList обновляется без проблемм.
если же отметить хоть один элемент в dirFileList -> беда!!!


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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