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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выпадающей список с возможными значениями 
:(
    Опции темы
magicfly
Дата 18.5.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день, сейчас я пытаюсь реализовать выпадающей список с возможными значениями
Код

public class FindMenuItemWindow extends JInternalFrame implements RefreshNeed{
private boolean isPerfomed=false;
private JTextField jTextField3=null;
public DefaultListModel cNazvModel=new DefaultListModel();
public Vector cNazv=new Vector();
public JTextField getJTextField3() {
if (jTextField3 == null) {
            jTextField3 = new JTextField();
            jTextField3.addFocusListener(new FocusAction(jTextField3,cNazvModel,cNazv,this));
            jTextField3.addKeyListener(new KeyTypeAction(jTextField3,cNazvModel,cNazv,this ));
                        
}



    public boolean isRefreshNeed() {
        
        return isPerfomed;
    }

    public void setRefreshNeed(boolean i) {
        isPerfomed=i;
        
    }
private JButton getJButton6() {
        if (jButton6 == null) {
            jButton6 = new JButton();
            jButton6.addActionListener(new RezultAction(this));
        }
        return jButton6;
    }

}


Эт основной класс. Я пропустил добавление на соответствующий панель и подобное



Код


public class KeyTypeAction implements KeyListener {
    private DefaultListModel model;
    private JTextField owner;
    //private Vector addedValues;
    private Vector list;
    private String prevText;
    private RefreshNeed ref;

    public KeyTypeAction(JTextField owner,DefaultListModel model, Vector list, RefreshNeed ref)
    {    //addedValues=new Vector();
        this.model=model;
        this.owner=owner;
        this.list=list;
        this.ref=ref;
        prevText="";
    }

    public void keyPressed(KeyEvent e) {
        
        
            }

    private void init()
    {    
        prevText="";    
        model.clear();
        for (Iterator it=list.iterator();it.hasNext();)
        {
            String element = (String) it.next();
            model.addElement(element);
        }
    }
    
    public void keyReleased(KeyEvent e)  {
        System.out.println("keyrealised"+model.getSize());
        if (e.getKeyCode()==KeyEvent.VK_BACK_SPACE || e.getKeyCode()==KeyEvent.VK_DELETE)
        {    System.out.println("someone action");
            String s="";
            try{ 
                s=owner.getDocument().getText(0,owner.getDocument().getLength());
            }
            catch (Exception e1) {
                e1.printStackTrace();
            }
            for(Iterator iter=list.iterator();iter.hasNext();)
            {    String val=iter.next().toString();
                if (val.startsWith(s)&& model.contains(val))
                    model.addElement(val);
            }//System.out.println("backspace: " +model.size()+"   "+deletedValues.size());
        }
                if (e.getKeyCode()==KeyEvent.VK_DOWN||e.getKeyCode()==KeyEvent.VK_KP_DOWN)
            System.out.println("down");
        
        if (!Character.isLetterOrDigit(e.getKeyChar())) return;
        String s="";
         
        Document doc=owner.getDocument();
        
        if (doc.getLength()==0) 
            {init();
            return;
            };
            try {
                s=doc.getText(0, doc.getLength());
            } catch (BadLocationException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            if (prevText.startsWith(s))
        {    for (Iterator iter = list.iterator(); iter.hasNext();)
            {    String val=iter.next().toString();
                if (val.startsWith(s)&&!model.contains(val))
                        model.addElement(val);
            }
            //out(s);
            prevText=s;
            return;
        };
        
        if (s.startsWith(prevText)||(ref.isRefreshNeed()))
        {
            
            for (Enumeration en=model.elements();en.hasMoreElements();)
            {//System.out.println(iter.hasNext());
                String val=(String)en.nextElement();            
                if (!val.startsWith(s))                
                    model.removeElement(val);
                    }
                
                System.out.println(model);
//                out(s);
                prevText=s;
            return;
        };
        init();
        
        }
    private void out(String s )
    {System.out.println(" get text: "+s+"prevText"+prevText);};
    public void keyTyped(KeyEvent e) {
        
    }
    
    

}



Вот реализация экшена

Код

public class FocusAction implements FocusListener {
    
    private JTextField owner;
    private JList list;
    
    private Popup popup;
    private FindMenuItemWindow findMenuItemWindow;
    private Vector values;
    private DefaultListModel model;
    private RefreshNeed ref;
    
    
    public FocusAction(JTextField owner,DefaultListModel model, Vector values,RefreshNeed ref)
    {
        this.owner=owner;
        this.model=model;
        this.values=values;
        this.ref=ref;
        list=new JList(model);
        
    }
    

    public void focusGained(FocusEvent arg0) {
        owner.setCaretPosition(owner.getDocument().getLength());
        owner.moveCaretPosition(0);
        Point location=owner.getLocation();
        SwingUtilities.convertPointToScreen(location, owner);
        location.y+=owner.getHeight();
        if (ref.isRefreshNeed()) refresh();
        if (model.size()==0) return;
        System.out.println(model);
        System.out.println(list.getComponentCount());    
        list.setPreferredSize(new Dimension(owner.getWidth(),list.getComponentCount()*20));
        list.setBorder(BorderFactory.createEtchedBorder());
        location.x-=owner.getX();
        popup=PopupFactory.getSharedInstance().getPopup(owner,list, location.x, location.y);
        popup.show();

    }

    public void focusLost(FocusEvent evt) {
        if (!(model.size()==0))popup.hide();

    }
    private void refresh()
    {
        model.clear();
        System.out.println(values);
        
        for(Iterator iter=values.iterator();iter.hasNext();)
        {    String val=iter.next().toString();
            model.addElement(val);
        }
        
        }
    }





Код

public class RezultAction implements Action {

public void actionPerformed(ActionEvent arg0) {
findMenuItemWindow.setRefreshNeed(true);
if (findMenuItemWindow.getJTextField3().getText().length() != 0)
                            {String cSlovoInNazv = findMenuItemWindow.getJTextField3().getText();
                              findMenuItemWindow.cNazv.add(cSlovoInNazv);
                                                        }
}



Некоторые вещи я опустил (конструкторы и другие методы)

Теперь вопрос, как сделать чтоб выпадающий список работал как надо ? =) 

ЗЫ прошу прощения за мой русский язык и пунктуацию 

Это сообщение отредактировал(а) magicfly - 18.5.2007, 15:15
PM MAIL   Вверх
goodday1941
Дата 18.5.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Непонятно.. 
что сделать то нужно в двух словах? 
свой JComboBox хочешь сделать, или я не так понял?


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0413 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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