[Java] editable combobox met add and remove

Pagina: 1
Acties:

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Voor een paar dialoogjes ben ik een editable combobox nodig waar de gebruiker items(strings) kan toevoegen en verwijderen. Ik heb nog een oude en slechte implementatie liggen, maar dat ding is echt slecht en werkt onvriendelijk. Heeft iemand misschien z`n implementatie van een combobox bean liggen of weet een link ernaar? Heb overal al gekeken http://www.jars.com http://www.javaboutique.com :P http://java.sun.com maar kan dus niets vinden. Vind het beetje zonde om meerdere keren het wiel uit te vinden (en ik ben niet bepaald een lief hebber van Swing).

de oude implementatie
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package com.jph.interfacebeans.text;

import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.basic.*;


public class EditableComboBox extends JComboBox implements KeyListener, MouseListener
{
    private JPopupMenu       popupMenu;
    private JTextField      editor;
    
    public EditableComboBox()
    {
        super();

        setEditable(true);
        editor = (JTextField)getEditor().getEditorComponent();
        editor.addKeyListener(this);
        editor.addMouseListener(this);
        
        popupMenu = new JPopupMenu();
        add(popupMenu);
        
        popupMenu.add(new RemoveAction());
    }

    public EditableComboBox(Object items[])
    {
        super(items);

        setEditable(true);
        editor = (JTextField)getEditor().getEditorComponent();
        editor.addKeyListener(this);
        editor.addMouseListener(this);
        
        popupMenu = new JPopupMenu();
        add(popupMenu);
        
        popupMenu.add(new RemoveAction());
            
    }
    
    public void addItem(Object object)
    {
        insertItemAt(object,0);
    }
    

    public void setModel()throws Exception
    {
        throw new Exception("Can`t set Model in EditableComboBox");
    }
    
    public void addEditingItem()
    {
        insertItemAt(editor.getText().toString(),0);
    }
    
    public void insertItemAt(Object object,int index)//throws Exception
    {
    //  if(!(object instanceof String))
    //      throw new Exception("Only Strings allowed");
        
        int k = 0;
        boolean unique = true;
        while(k<getItemCount())
        {
            Object s = getItemAt(k);
            if(s.equals(object))
            {
                unique = false;
                k = getItemCount();
            }
            else
                k++;
        }
            
        if(unique && object.toString().trim().length()>0)
            super.insertItemAt(object,index);
    }
    
    //an Action needed for the PopupMenu
    class RemoveAction extends AbstractAction
    {
        public RemoveAction()
        {
            super("Remove");
        }
        
        public void actionPerformed(ActionEvent evt)
        {
            removeItemAt(getSelectedIndex());
        }
    }

    //method to satisfy KeyListener Interface
    public void keyPressed(KeyEvent e)
    {
        if (e.getKeyCode()==KeyEvent.VK_ENTER)
        {
            insertItemAt(editor.getText().toString(),0);
            setSelectedIndex(0);
        }
    }
    
    //method to satisfy KeyListener Interface
    public void keyReleased(KeyEvent e)
    {
    }
    
    //method to satisfy KeyListener Interface
    public void keyTyped(KeyEvent e)
    {
    
    }
    
    //method to satisfy MouseListener Interface
    public void mouseClicked(MouseEvent e)
    {
    }
    
    //method to satisfy MouseListener Interface
    public void mouseEntered(MouseEvent e)
    {
    }
    
    //method to satisfy MouseListener Interface
    public void mouseExited(MouseEvent e)
    {
    }
    
    //method to satisfy MouseListener Interface
    public void mousePressed(MouseEvent e)
    {
    }
    
    //method to satisfy MouseListener Interface
    public void mouseReleased(MouseEvent e)
    {
        if (e.isPopupTrigger())
        {
            int x = e.getX();
            int y = e.getY();
               
            popupMenu.show(this, x, y);
        }
    }
}

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik gooi hem nog een keer omhoog, hoop echt dat iemand zo`n beestje heeft liggen.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Nope... maar erg veel werk is dit toch ook niet?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-09 22:25

Janoz

Moderator Devschuur®

!litemod

He alarmnummer... Dit lijkt bijna op een scriptrequest.. Als je nou gewoon op de RuG was gebleven dan had je het zelf vast wel gekunt ;).. ('96 was het niet?)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Op woensdag 10 oktober 2001 20:19 schreef Janoz het volgende:
He alarmnummer... Dit lijkt bijna op een scriptrequest.. Als je nou gewoon op de RuG was gebleven dan had je het zelf vast wel gekunt ;).. ('96 was het niet?)
Ik was toen meer geinteresseerd in proggen dan in al die kouwe wiskunde vakken (alhoewel wiskunde wel mijn favoriet vak was op vwo) en zat toen der tijd veel te veel te blowen :7 dus van mijn studie is niet veel terecht gekomen }:O Vandaar maar lekker naar de hts, tijd voor je eigen projecten :) Maar wat doe jij nu Gijs? (volgens mij hebben we elkaar nog een keer gesproken voor dat bedrijf op Zernike complex).

En ik werk trouwens nu als programmeur voor de RuG :)

http://129.125.172.114

Dit is het project waar ik nu mee bezig ben. WebStart is even uitgeschakeld.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-09 22:25

Janoz

Moderator Devschuur®

!litemod

Op donderdag 11 oktober 2001 09:25 schreef Alarmnummer het volgende:

Maar wat doe jij nu Gijs? (volgens mij hebben we elkaar nog een keer gesproken voor dat bedrijf op Zernike complex).
Tja .. als het goed is strax met afstuderen beginnen (waarschijnlijk iets met Ziekenhuis MRI scan's en bloedbanen visualiseren in de Cave :9~. Maar heb je geen ICQ ofzo? Gaat nu wel redelijk offtopic.. (Bedrijf was Netvisit :))

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Janoz: Tja .. als het goed is strax met afstuderen beginnen (waarschijnlijk iets met Ziekenhuis MRI scan's en bloedbanen visualiseren in de Cave :9~.
Waar studeer je? Deze afstudeerrichting heeft verdacht veel weg van de variant Medisch Technische Informatica aan de UU...Als je dat doet: je bent dus al 4e jaars?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • tomato
  • Registratie: November 1999
  • Niet online
Op vrijdag 12 oktober 2001 00:15 schreef mbravenboer het volgende:
Waar studeer je?
Aan z'n profile te zien in Groningen (woonplaats + email@rug.nl) ;)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Owh ja, rug is natuurlijk Groningen |:(

Op zich wel een leuk onderwerp. Bij MTI zijn ze ook met al dit soort stuff bezig met scannertjes, combineren van beelden, visualiseren enzovoorts :)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-09 22:25

Janoz

Moderator Devschuur®

!litemod

* Janoz is 6e jaars :) Afstudeer richting Scientific Computing and Imaging.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
[edit] nieuwe source nog niet beschikbaar :)
Pagina: 1