Editierbare JComboBox, die nur Ganzzahlen als Eingabewerte zulässt

inflamer

Bekanntes Mitglied
Hallo zusammen,

bekommt man sowas mit 2-3 Zeilen Code hin? Ich habe bisher leider nichts dazu gefunden.

Danke!

Edit / Nachtrag: Editierbar ist sie schon, eine Popup-Liste mit Standardwerten hat sie auch, jetzt muss sie halt nur noch selbstständig dafür sorgen, dass der User ausschließlich Ganzzahlen eingeben kann, so wie das etwa ein JSpinner in Kombination mit einem SpinnerNumberModel tut.
 
Zuletzt bearbeitet:
Mit einem entsprechendem Filter bekommt man das in 2-3 Zeilen Code hin, z. B. für eine JComboBox cb:
Java:
        JTextComponent tc = (JTextComponent) cb.getEditor()
                .getEditorComponent();
        AbstractDocument doc = (AbstractDocument) tc.getDocument();
        doc.setDocumentFilter(new SimpleRegexFilter("\\d*"));

Der Filter hätte dann aber ein paar Zeilen mehr, ist dafür wiederverwendbar und könnte z. B. so aussehen:
Java:
public class SimpleRegexFilter extends DocumentFilter {
    private final String regex;

    public SimpleRegexFilter(String regex) {
        this.regex = regex;
    }

    @Override
    public void insertString(DocumentFilter.FilterBypass fb,
            int offset, String string, AttributeSet attr)
            throws BadLocationException {
        if (string.matches(regex)) {
            fb.insertString(offset, string, attr);
        }
    }
    @Override
    public void replace(DocumentFilter.FilterBypass fb, int offset,
            int length, String string, AttributeSet attr)
            throws BadLocationException {
        if (string.matches(regex)) {
            fb.replace(offset, length, string, attr);
        }
    }
}
 
Danke für die hilfreiche Antwort!

Sowas ähnliches schwebte mir schon vor, allerdings mit einer Document-Unterklasse statt DocumentFilter. Aber Deine Lösung ist zweifelsohne die sauberere, da sie nicht unnötig die vorhandene Document-Instanz ersetzt.

Anscheinend geht's mit nur 3 Zeilen gar nicht, nun ja. Ist aber dennoch eine nützliche Erkenntnis.
 
Anscheinend geht's mit nur 3 Zeilen gar nicht, nun ja
Swing ist tatsächlich ein Framework, das dazu gedacht ist, erweitert zu werden. Allerdings wäre sicher jeder froh gewesen, wenn hier und da ein paar sinnvolle Implementierungen spendiert worden wären. Es gibt aber sicher Bibliotheken, die so etwas bereits enthalten, dann wird es wieder ein Dreizeiler oder sogar noch kürzer 🙂
 

Zurück
Oben