• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

dafür sorgen, dass im JTextfield nur zahlen eingebbar sind

mhmt_03

mhmt_03

Mitglied
Hallo und guten abend, ich habe derzeit ein problem mit meinen aufgaben: und zwar soll ich als hausaufgabe eine gui zur medienverwaltung herstellen, aber ich möchte, dass wenn man sein eigenes medium erstellt, dass man bei der spielzeit nur zahlen eingeben kann. ich habe im internet schon gesucht aber nicht wirklich nachvollziehen können, wie man das schließlich macht. ich habe dafür extra ein jtextfield erstellt und es zahlen genannt. dieses werde ich dann wenns funktioniert einfach visible true oder eben false machen.
ps: ich weiß das einige der verwendeten methoden nicht effizient sind, aber das ist halt leider das, was ich in der schule gelernt habe. und wie ihr merken werdet ist das programm nicht fertig.

vielen dank für eure hilfen.
 

Anhänge

  • GUI.java
    12,6 KB · Aufrufe: 1
mhmt_03

mhmt_03

Mitglied
(mein quelltext wusste nicht wie das mit in die frage soll)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
public class GUI implements ActionListener {
String x;
int y;

EigenesMedium eigenesmedium = new EigenesMedium();
private JFrame window = new JFrame("GUI für vererbung");
//Eine Schaltfläche zum Anklicken
private JButton knopf1 = new JButton("DVD");
private JButton knopf1E = new JButton("DVD Ergänzung");
private JButton knopf2 = new JButton("CD");
private JButton knopf2E = new JButton("CD Ergänzung");
private JButton knopf3 = new JButton("Videospiel");
private JButton knopf3E = new JButton("Videospiel Ergänzung");
private JButton knopf4 = new JButton("Brettspiel");
private JButton knopf4E = new JButton("Brettspiel Ergänzung");
private JButton knopf5 = new JButton("Neuer eintrag");
private JButton knopf5E = new JButton("Informationen abrufen");
private JButton knopf6E = new JButton("eigenes medium erstellen");
private JButton knopf6 = new JButton(eigenesmedium.getTitel());
private JButton knopf1M = new JButton("Titel");
private JButton knopf2M = new JButton("Spielzeit");
private JButton knopf3M = new JButton("besitz");
private JButton knopf4M = new JButton("kommentar");
private JButton knopf5M = new JButton("eigener eintrag");
//Eine Schaltfläche zum Anklicken
private JButton knopf_ende = new JButton("Beenden");
//Ein Beschriftungsfeld z.B. für Überschriften
private JLabel ueberschrift = new JLabel("Vererbung beispiel");
//Textfeld für Eingaben des Benutzers
private JTextField text1 = new JTextField("Für informationen auf das gewünschte feld klicken");
private JTextField text2 = new JTextField("");
private JTextField zahlen = new JTextField();

public GUI(){
//Erstelle Fenster
window.setSize(600,400);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setLayout(null);

//Überschrift
ueberschrift.setLocation(50,30);
ueberschrift.setSize(400,50);
ueberschrift.setFont(new Font("Dialog", 0, 30));
window.add(ueberschrift);

//Schaltfläche 1
knopf1.setSize(150,30);
knopf1.setLocation(50,150);
knopf1.addActionListener(this);
window.add(knopf1);

knopf1E.setSize(150,30);
knopf1E.setLocation(50,150);
knopf1E.addActionListener(this);
window.add(knopf1E);
knopf1E.setVisible(false);
knopf1M.setSize(150,30);
knopf1M.setLocation(50,150);
knopf1M.addActionListener(this);
window.add(knopf1M);
knopf1M.setVisible(false);
//Schaltfläche 2
knopf_ende.setSize(150,30);
knopf_ende.setLocation(210,150);
knopf_ende.addActionListener(this);
window.add(knopf_ende);

knopf2.setSize(150,30);
knopf2.setLocation(50,190);
knopf2.addActionListener(this);
window.add(knopf2);

knopf2E.setSize(150,30);
knopf2E.setLocation(50,190);
knopf2E.addActionListener(this);
window.add(knopf2E);
knopf2E.setVisible(false);

knopf2M.setSize(150,30);
knopf2M.setLocation(50,190);
knopf2M.addActionListener(this);
window.add(knopf2M);
knopf2M.setVisible(false);
//Schaltfläche 2

knopf3.setSize(150,30);
knopf3.setLocation(210,190);
knopf3.addActionListener(this);
window.add(knopf3);

knopf3E.setSize(150,30);
knopf3E.setLocation(210,190);
knopf3E.addActionListener(this);
window.add(knopf3E);
knopf3E.setVisible(false);

knopf3M.setSize(150,30);
knopf3M.setLocation(210,190);
knopf3M.addActionListener(this);
window.add(knopf3M);
knopf3M.setVisible(false);

knopf4.setSize(150,30);
knopf4.setLocation(50,230);
knopf4.addActionListener(this);
window.add(knopf4);

knopf4E.setSize(150,30);
knopf4E.setLocation(50,230);
knopf4E.addActionListener(this);
window.add(knopf4E);
knopf4E.setVisible(false);

knopf4M.setSize(150,30);
knopf4M.setLocation(50,230);
knopf4M.addActionListener(this);
window.add(knopf4M);
knopf4M.setVisible(false);


knopf5.setSize(150,30);
knopf5.setLocation(210,230);
knopf5.addActionListener(this);
window.add(knopf5);

knopf5E.setSize(150,30);
knopf5E.setLocation(210,230);
knopf5E.addActionListener(this);
window.add(knopf5E);
knopf5E.setVisible(false);

knopf5M.setSize(150,30);
knopf5M.setLocation(210,230);
knopf5M.addActionListener(this);
window.add(knopf5M);
knopf5M.setVisible(false);

knopf6.setSize(150,30);
knopf6.setLocation(370,150);
knopf6.addActionListener(this);
window.add(knopf6);
knopf6.setVisible(false);

knopf6E.setSize(150,30);
knopf6E.setLocation(370,150);
knopf6E.addActionListener(this);
window.add(knopf6E);
knopf6E.setVisible(false);
text1.setSize(510,30);
text1.setLocation(50,110);
window.add(text1);
text1.setEditable(false);

text2.setSize(510,30);
text2.setLocation(50,270);
window.add(text2);
text2.setEditable(false);

zahlen.setSize(510,30);
zahlen.setLocation(50,270);
window.add(zahlen);
zahlen.setEditable(false);
zahlen.setVisible(false);

window.setVisible(true);

}
DVD dvd = new DVD();
CD cd = new CD();
Brettspiel brettspiel = new Brettspiel();
Videospiel videospiel = new Videospiel();

public void actionPerformed(ActionEvent a) {

dvd.setTitel("Film xy ");
dvd.setHabich(false);
dvd.setSpielzeit(120);
dvd.setKommentar(" lieblingsfilm ");

if(a.getSource() == knopf1){

if(dvd.getErgänzung() ==null){
text2.setText(dvd.getTitel() + dvd.getSpielzeit()+ dvd.getKommentar());

} else {
text2.setText(dvd.getTitel() + dvd.getSpielzeit()+ dvd.getKommentar()+ "ihre Ergänzung: "+dvd.getErgänzung());

}}

if(a.getSource() == knopf2){

cd.setTitel("top ten hits ");
cd.setHabich(true);
cd.setSpielzeit(60);
cd.setKommentar(" die nr 3 ist gut ");
if(cd.getErgänzung() ==null){
text2.setText(cd.getTitel() + cd.getSpielzeit()+ cd.getKommentar());

} else {
text2.setText(cd.getTitel() + cd.getSpielzeit()+ cd.getKommentar()+ " ihre Ergänzung: "+cd.getErgänzung());

}
}

videospiel.setTitel("ff7 ");
videospiel.setHabich(true);
videospiel.setSpielzeit(120);
videospiel.setKommentar(" Sephiroth ");
videospiel.setMindestspieleranzahl(1);
videospiel.setMaximalspieleranzahl(1);
videospiel.setPlatform(" PS4 ");
videospiel.setErgänzung("");
if(a.getSource() == knopf3){
if(videospiel.getErgänzung()==null){
text2.setText(videospiel.getTitel() + videospiel.getSpielzeit()+ videospiel.getKommentar()+ "mindestspieleranzahl: " + videospiel.getmindestspieleranzahl()+ " maximalspieleranzahl: "+ videospiel.getmaximalspieleranzahl()+ "Platform: "+ videospiel.getplatform());
} else {text2.setText(videospiel.getTitel() + videospiel.getSpielzeit()+ videospiel.getKommentar()+ "mindestspieleranzahl: " + videospiel.getmindestspieleranzahl()+ " maximalspieleranzahl: "+ videospiel.getmaximalspieleranzahl()+ "Platform: "+ videospiel.getplatform()+"ihre Ergänzung " +videospiel.getErgänzung());
}
}

brettspiel.setTitel("Monopoly ");
brettspiel.setHabich(true);
brettspiel.setSpielzeit(60);
brettspiel.setKommentar(" Schlossalee ");
brettspiel.setMindestspieleranzahl(2);
brettspiel.setMaximalspieleranzahl(6);

if(a.getSource() == knopf4){
if(brettspiel.getErgänzung()==null){
text2.setText(brettspiel.getTitel() + brettspiel.getSpielzeit()+ brettspiel.getKommentar() + "mindestspieleranzahl: " + brettspiel.getmindestspieleranzahl()+ " maximalspieleranzahl: "+ brettspiel.getmaximalspieleranzahl());

} else { text2.setText(brettspiel.getTitel() + brettspiel.getSpielzeit()+ brettspiel.getKommentar() + "mindestspieleranzahl: " + brettspiel.getmindestspieleranzahl()+ " maximalspieleranzahl: "+ brettspiel.getmaximalspieleranzahl()+"ihre Ergänzung: "+brettspiel.getErgänzung());
}
}
if(a.getSource() == knopf_ende){
//Programm beenden
System.exit(0);
}
if(a.getSource()== knopf5){
text1.setText("in die eingabe leiste die neuen daten eingeben und dann die gewünschte kategorie wählen");
knopf1.setVisible(false);
knopf2.setVisible(false);
knopf3.setVisible(false);
knopf4.setVisible(false);
knopf5.setVisible(false);

knopf1E.setVisible(true);
knopf2E.setVisible(true);
knopf3E.setVisible(true);
knopf4E.setVisible(true);
knopf5E.setVisible(true);
knopf6E.setVisible(true);
text2.setEditable(true);
text2.setText("");
}
if(a.getSource()== knopf5E){
knopf1.setVisible(true);
knopf2.setVisible(true);
knopf3.setVisible(true);
knopf4.setVisible(true);
knopf5.setVisible(true);

knopf1E.setVisible(false);
knopf2E.setVisible(false);
knopf3E.setVisible(false);
knopf4E.setVisible(false);
knopf5E.setVisible(false);
knopf6E.setVisible(false);
text2.setEditable(false);
text2.setText("");
if (eigenesmedium.getTitel()!=null ){
knopf6.setVisible(true);
}
}
if(a.getSource() == knopf1E){

if (text2.getText().trim().length() == 0){

text1.setText("bitte eine richtige Eingabe");
}
else{
dvd.setErgänzung(text2.getText().trim());
text2.setText("");
text1.setText("Ergänzung erfolgreich hinzugefügt");
}
}
if(a.getSource() == knopf2E){
if (text2.getText().trim().length() == 0){

text1.setText("bitte eine richtige Eingabe");
}
else{
cd.setErgänzung(text2.getText().trim());
text2.setText("");
text1.setText("Ergänzung erfolgreich hinzugefügt");
}
}
if(a.getSource() == knopf3E){
if (text2.getText().trim().length() == 0){

text1.setText("bitte eine richtige Eingabe");
}
else{
videospiel.setErgänzung(text2.getText().trim());
text2.setText("");
text1.setText("Ergänzung erfolgreich hinzugefügt");
}
}
if(a.getSource() == knopf4E){
if (text2.getText().trim().length() == 0){

text1.setText("bitte eine richtige Eingabe");
}
else{
brettspiel.setErgänzung(text2.getText().trim());
text2.setText("");
text1.setText("Ergänzung erfolgreich hinzugefügt");
}
}
if(a.getSource() == knopf6E){
knopf1E.setVisible(false);
knopf2E.setVisible(false);
knopf3E.setVisible(false);
knopf4E.setVisible(false);
knopf5E.setVisible(false);
knopf6E.setVisible(false);
text2.setEditable(true);

knopf1M.setVisible(true);
knopf2M.setVisible(true);
knopf3M.setVisible(true);
knopf4M.setVisible(true);
knopf5M.setVisible(true);
}
if(a.getSource() == knopf1M){
eigenesmedium.setTitel(text2.getText());
}
if(a.getSource() == knopf2M){
if (zahlen.getText()== ""){
text2.setVisible(false);
zahlen.setVisible(true);
zahlen.setEditable(true);
}
else if(zahlen.getText()!= ""){
x=zahlen.getText();
y=Integer.parseInt(x);
}
}
if(a.getSource() == knopf3M){

}
if(a.getSource() == knopf4M){

}
if(a.getSource() == knopf5M){

}
}}
 
mhmt_03

mhmt_03

Mitglied
In der Toolbar des Kommentar-Editors ist ganz links eine Schaltfläche "</>". Da drauf klicken, Code inkl. Einrückungen in die Textbox kopieren.

Zur Frage: dafür bietet sich ein JFormattedTextField an.
1. danke für den hinweis
2. jformattedtextfield hab ich auch oft gelesen aber im internet waren nur beispiele auf eigene klassen bezogen. aus diesen klassen konnte ich leider nicht erkennen wie das jformatted textfield funktioniert.
 
mihe7

mihe7

Top Contributor
Wenn Du in Google nach jformattedtextfield suchst, bekommst Du als ersten Eintrag "How to Use Formatted Text Field" von Oracle (https://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html), ein Artikel aus dem Java Tutorial, der mit entsprechenden Erläuterungen und Beispielen aufwartet.

Beispielweise kannst Du ein NumberFormat erstellen, dieses entsprechend Deinen Vorstellungen konfigurieren und damit ein JFormattedTextField erstellen.
 
I

ImmerDieseKinder

Mitglied
dafür bietet sich ein JFormattedTextField an
Das, oder einen eigenen DocumentFilter spendieren:
Java:
    public static void main(String[] args) {
        JTextField t = new JTextField("000");
        ((PlainDocument) t.getDocument()).setDocumentFilter(new DocumentFilter() {
            private boolean test(String s) {
                try {
                    Integer.parseInt(s);
                    return true;
                } catch (Exception e) {
                    return false;
                }
            }

            @Override
            public void remove(FilterBypass fb, int offset, int length) throws BadLocationException {
                super.remove(fb, offset, length);
            }

            @Override
            public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
                // Document doc = fb.getDocument();
                // String s = doc.getText(0, doc.getLength());
                if (test(string)) {
                    super.insertString(fb, offset, string, attr);
                }
            }

            @Override
            public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
                // Document doc = fb.getDocument();
                // String s = doc.getText(0, doc.getLength());
                if (test(text)) {
                    super.replace(fb, offset, length, text, attrs);
                }
            }
        });
        JFrame f = new JFrame();
        f.setLayout(new GridLayout(2, 1));
        f.add(new JLabel("Ich will nur Zahlen:"));
        f.add(t);
        f.pack();
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        f.setVisible(true);
    }
 
mhmt_03

mhmt_03

Mitglied
tut mir leid, dass ich wieder störe aber ich habe leider keine Lösung gefunden...
ich habe mir plain documents und auch jformattedtextfields angeguckt aber leider nicht auf mein Programm nicht anwenden können. die Beispiele im Internet und auf YouTube vor allem benutzen immer ein ganz anderes Programm, indem die das gut auch nicht selbst erstellen sondern aus einer liste die Textfelder etc. ziehen, weshalb ich das nicht ansatzweise anwenden kann. deswegen wollte ich fragen wie das funktioniert und auf Oracle habe ich auch nicht erschließen können wie das jetzt genau anwendbar ist. ich habe bis jetzt verstanden, dass man irgendwie eine klasse macht, Inder dieser "Filter" für das textfield ist und dann kann man anscheinend den Filter auf das Textfeld übertragen. Liege ich bis jetzt so richtig? und wenn nein was habe ich falsch verstanden? Mein hauptproblem ist halt dass ich keine person zum fragen habe, da die schulen derzeit geschlossen sind und meine lehrer anscheinend keine lust haben nach 3 tagen auf fragen zu antworten.
 
Zuletzt bearbeitet:
mhmt_03

mhmt_03

Mitglied
hab es jetz irgendwie geschafft das hinzukriegen, aber verstanden habe ich es leider nicht und ich habe es mit einem document filter gemacht..
 
I

ImmerDieseKinder

Mitglied
Was hast du denn noch nicht verstanden? Der DocumentFilter kann ungültige Eingaben "yielden", bevor diese ins TextField übernommen werden. Das heißt, beim Einfügen oder Ersetzen ungültige Werte landen nicht im TextField...
 
mihe7

mihe7

Top Contributor
Hier mal die Variante via JFormattedTextField mit vielen Kommentaren zum Verständnis. Dieses Textfeld liefert eben direkt Integer-Objekte, so dass man nicht den Umweg über den String gehen muss. Dafür verhält es sich auch etwas anders wie die Variante mit dem DocumentFilter. Die beiden Ansätze lassen sich natürlich auch kombinieren, auch mit einem InputVerifier, aber wir wollen mal die Kirche im Dorf lassen :)

Java:
import java.awt.BorderLayout;
import java.text.NumberFormat;
import javax.swing.*;
import javax.swing.text.NumberFormatter;

public class Test {

    public void run() {
        /* Zahlenformat: ganzzahlige Zahlen ohne Gruppierung */
        NumberFormat nf = NumberFormat.getIntegerInstance();
        nf.setGroupingUsed(false);

        /* Formatierer unter Verwendung des Zahlenformats 
           erstellen und konfigurieren */
        NumberFormatter formatter = new NumberFormatter(nf);
        formatter.setValueClass(Integer.class); // Integer-Objekte gewuenscht
        formatter.setMinimum(0); // Nicht-negative Eingaben, also von 0
        formatter.setMaximum(Integer.MAX_VALUE); // bis MAX_VALUE
        formatter.setAllowsInvalid(false); // Ungueltige Eingaben sind verboten
        formatter.setCommitsOnValidEdit(true); // Jeder gueltige Wert soll
                                               // ubernommen werden

        /* Textfeld erstellen, das den Formatierer verwendet. */
        JFormattedTextField input = new JFormattedTextField(formatter);
        input.setColumns(10); // gewuenschte Breite des Textfelds in "Spalten"

        JButton output = new JButton("Ausgabe");
        output.addActionListener(e -> {
            Integer value = (Integer) input.getValue();
            // mach was mit value
            System.out.println(value);
        });

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(input, BorderLayout.NORTH);
        frame.add(output, BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Ist Java die richtige Programmiersprache dafür? Java Basics - Anfänger-Themen 29
O Gibt es dafür einen regulären Ausdruck? Java Basics - Anfänger-Themen 9
B Liebesprogramm erstellt aber wie sorg ich dafür, dass es im bildschrim agezeigt wird? Java Basics - Anfänger-Themen 16
N Bildbeispiel von Layout: wie nutze ich das GBLayout dafür? Java Basics - Anfänger-Themen 17
G JSP ausführen ohne dafür Browserfenster zu öffnen Java Basics - Anfänger-Themen 5
S kann man das kürzer schreiben? bzw gibts dafür schon was? Java Basics - Anfänger-Themen 6
K welche Jkomponente benötige ich dafür: Java Basics - Anfänger-Themen 6
kulturfenster Tic Tac Toe Layout-Sorgen Java Basics - Anfänger-Themen 25
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2
W Programm dass Palindrome erkennt Java Basics - Anfänger-Themen 6
B Automatisierung von Jobs / @EJB Scheduler / Verhinderung, dass Queue überläuft Java Basics - Anfänger-Themen 2
Dimax Wie erkennt man dass der gesuchte am Zeilenanfang steht Java Basics - Anfänger-Themen 10
M java.io.FileNotFoundException trotz dass Verzeichnis korrekt angegeben ist! Java Basics - Anfänger-Themen 20
M In Netbeans Programm so abspeichern dass es funktioniert Java Basics - Anfänger-Themen 8
W Wie kann man folgenden Code abändern, dass er den Score mit Zahl anzeigt? Java Basics - Anfänger-Themen 3
X wie kann ich in bluej/java einene 2d array mit zahlen fuellen, so dass sich diese in der der zeilen Java Basics - Anfänger-Themen 2
S Double mithilfe eines Scanners so einlesen, dass ich damit rechnen kann Java Basics - Anfänger-Themen 4
1 2D-Array, dass das pascalsche Dreieck berechnet Java Basics - Anfänger-Themen 2
E Methoden Wie kann ich eine Methode so schreiben, dass Methodenaufruf polymorph erfolgen kann? Java Basics - Anfänger-Themen 8
D 100.0% gleichmäßig aufteilen, so dass Summe 100.0% sind, nicht 99,9% oder 100,1% Java Basics - Anfänger-Themen 3
S Festlegen, dass Subklasse nicht erlaubt ist? Java Basics - Anfänger-Themen 3
S Abstrakte Klasse, festlegen, dass Methode verändert werden muss. Java Basics - Anfänger-Themen 4
T Vorschreiben, dass Konstruktor überschrieben wird Java Basics - Anfänger-Themen 10
G Warum geht dass nicht? Actionlistener geht nicht. Java Basics - Anfänger-Themen 4
A wie durch klicken regeln dass nächster "case" auge Java Basics - Anfänger-Themen 15
E Vermeiden,dass mehrere Instanzen eines Java-Programms laufen Java Basics - Anfänger-Themen 2
B nach Zeichen suchen dass im string mehrmals vorkommt Java Basics - Anfänger-Themen 3
J Rekursiv muss dass laufen! Java Basics - Anfänger-Themen 11
K Brauche nur Tipps Leute habe keine plan wie ich dass machen Java Basics - Anfänger-Themen 4
T Suche ein array dass dir stets die freien indexe gibt Java Basics - Anfänger-Themen 7
M Java-Software so anbieten, dass sie leicht zu starten ist Java Basics - Anfänger-Themen 16
C Mein Programm rechnet lieber als dass es malt - warum? Java Basics - Anfänger-Themen 10
T Programm so abbrechen, dass finally ausgeführt wird Java Basics - Anfänger-Themen 7
U super-Konstruktor Aufrufen mit Object, dass Exception wirft Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Anzeige

Neue Themen


Oben