Datenübergabe über Buttons

kodela

Bekanntes Mitglied
Hallo,

In meinem Stradoku Programm habe ich zwei Ziffernblöcke mit je neun Buttons, über die Werte zugewiesen werden können. Das funktioniert unter Windows seit Jahren einwandfrei. Jetzt habe ich festgestellt, dass unter Linux von den Buttons nur die Beschriftung (1 bis 9), aber der Button selbst nicht angezeigt wird.

Ich kam daher auf den Gedanken, über jeden Button ein Icon mit der jeweiligen Ziffer zu legen. Das wird unter Linux dann auch angezeigt, aber jetzt wird kein Wert mehr übergeben.

Hier der wesentliche Auszug aus der Bearbeitungsmethode für die Übernahme eines Wertes, wenn der Anwender einen der Buttons aus dem Kandidatenblock anklickt.

Java:
    private void kandidat_ActionPerformed(java.awt.event.ActionEvent evt) {                                       

        int knd = Integer.parseInt(((JButton) evt.getSource()).getText());
          ...
          ...
    }

In der ersten Zeile dieser Methode wird der für actionCommand jeweils festgelegte Wert als String abgefragt und nach Integer geparst.

Ist den Buttons aber ein Icon überlegt, wird ein leerer String zurückgegeben. Hier das Fehlerprotokoll:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:592)
at java.lang.Integer.parseInt(Integer.java:615)
at stradoku.StradokuApp.kandidat_ActionPerformed(StradokuApp.java:3976)

Kann mir jemand sagen, warum bei den Buttons mit Icon der für actionCommand jeweils festgelegte Wert nicht übergeben wird?

kodela

PS: Problem ist gelöst:

getText() durch getActionCommand() ersetzen!
 
Zuletzt bearbeitet:

Robert Zenz

Top Contributor
Jetzt habe ich festgestellt, dass unter Linux von den Buttons nur die Beschriftung (1 bis 9), aber der Button selbst nicht angezeigt wird.
Mh, ich brauche eine Wiederholung zum Thema LaF.

Also Swing unterstuetzt Themes, in Java Terminologie nennt sich das 'Look and Feel'. Kurzum, welches LaF verwendet wird, ist von der Platform abhaengig, aber du kannst es in deiner Applikation (oder der Benutzer per JVM-Parameter) ueberschreiben.

Ich rate mal dass unter Linux ein LaF verwendet wurde welches eben keine Rahmen fuer die `JButton`s zeichnet, oder, was ich mir auch gut vorstellen kann, dass das GTK-LaF eingestellt war. GTK ist leider sehr, sehr schwierig geworden wenn es um Interoperatibilitaet geht, und es wuerde mich nicht wundern wenn die die Kompatibilitaet zum GTK-LaF von Swing zerbrochen haben und es daher einfach nicht mehr richtig funktionieren kann.
 

kodela

Bekanntes Mitglied
Danke für die Antwort.

Ja, das Problem hängt sicher mit LaF zusammen. Ich muss da aber jetzt etwas weiter ausholen. Meine ursprüngliche Aussage, unter Linux würde von den Buttons nur die Beschriftung (1 bis 9), aber der Button selbst nicht angezeigt, ist nicht korrekt. Genauer gesagt, ich erhielt von einem Anwender des Programms die Frage, ob es auch unter Linux lauffähig sei. Da ich selbst Linux nicht verwende, konnte ich die Frage auch nicht verbindlich beantworten. Grundsätzlich müsste das Programm ja auch unter Linux lauffähig sein. Da ich aber LaF für Windows in der main-Methode eingebunden habe entfernte ich es einmal und nun bekam ich den geschilderten Zustand, dass die Buttons nicht mehr als solche, sondern nur die Beschriftung mit den Ziffern angezeigt wurden. Meine main-Methode sieht so aus:

Java:
    public static void main(final String args[]) {
        try {
            UIManager.setLookAndFeel(
                    UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException
                | InstantiationException
                | IllegalAccessException
                | UnsupportedLookAndFeelException ex) {
            JOptionPane.showMessageDialog(null,
                    "Es ist ein Fehler aufgetreten. \n\n"
                    + ex.getMessage(),
                    "Hinweis", 1);
        }
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new StradokuApp(args).setVisible(true);
            }
        });
    }

Entfernte ich daraus den try-Block, kam es zu dem geschilderten Verhalten mit den Ziffernblöcken. In Unkenntnis der genauen Auswirkungen von der LaF-Einbindung. Wie ich aber bereits geschrieben habe, konnte ich durch eine Änderung der ActionPerformed-Methoden das Problem umgehen, indem ich nicht mit getText() die Beschriftung sondern statt dessen actionCommand abfragte.

Wie sich dies alles aber unter Linux verhält, weiß ich leider nicht. Unter Windows habe ich allerdings ein zweites Problem bei fehlender LaF-Einbindung entdeckt. In der Stradoku-Liste werden die Felder der Kopfzeile nicht angezeigt, alle Felder sind schwarz. Hier rätsle ich noch immer, woran das liegt. Alle anderen Funktionalitäten laufen auch ohne LaF-Einbindung problemlos. Also lasse ich die LaF-Einbindung und riskiere, dass sie sich unter Linux aber negativ auswirkt.
 

Oneixee5

Top Contributor
Du kannst das einfach steuern:
Java:
String os = System.getProperty("os.name");
wenn os das Wort 'Windows' enthällt dann mache das ansonsten mache was anderes.

Du kannst dir auch mal das ansehen: https://github.com/JFormDesigner/FlatLaf
Das funktioniert für mich sehr gut.
 
Zuletzt bearbeitet:

Robert Zenz

Top Contributor
Da ich aber LaF für Windows in der main-Methode eingebunden habe entfernte ich es einmal und nun bekam ich den geschilderten Zustand, dass die Buttons nicht mehr als solche, sondern nur die Beschriftung mit den Ziffern angezeigt wurden.
Das entspricht aber nicht deinem Code, in deinem Code nimmst du das System-LaF, dies entspricht auch immer dem aktuellen System. Also unter Microsoft Windows bekommst das Windows-LaF, unter Linux ein enstprechendes LaF (entweder GTK oder Metal).

Wenn du es nicht angibst, gibt es eben das Standard-LaF, da bin ich ehrlich gesagt nicht so firm was genau selektiert wird in dem Fall. Also der Code so wie du ihn hast sollte auf allen Platformen funktionieren, es sei den sie haben kein Standard-LaF, in welchem Fall er eben Fehler werfen, aber die Applikation nicht stoppen wird.
 

kodela

Bekanntes Mitglied
Danke für Eure Antworten.

Da muss ich noch einiges, LaF betreffend, verdauen. Das Problem mit der Anzeige der Buttons hat sich erledigt. Ein Ersatz für die Beschriftung der Buttons mit den Ziffern durch Icons scheidet auch aus, war ein nicht gründlich durchdachter Schnellschuss, da die Beschriftung auch für die Verwendung der Buttons als Filteranzeige dient. Bei einem Icon kann die Ziffer für einen gesetzten Filter nicht andersfarbig ausgegeben werden. Und die Frage, ob das Programm unter Linux uneingeschränkt lauffähig ist, hat sich laut einer Mitteilung des Anwenders für unbestimmte Zeit nach vorne verschoben. Also wird zunächst bei mir nichts verändert.

Unabhängig davon werde ich mich aber mit Euren Hinweisen noch beschäftigen, denn mit den LaF-Einstellungen habe ich noch eine große Wissenslücke.
 

Oneixee5

Top Contributor
Die Beschriftung der Buttons so zu "missbrauchen" ist nicht sinnvoll. Du kannst z.B.: das Programm auch nie in einer anderen Sprache rausbringen.
 

kodela

Bekanntes Mitglied
Die Beschriftung der Buttons so zu "missbrauchen" ist nicht sinnvoll. Du kannst z.B.: das Programm auch nie in einer anderen Sprache rausbringen.
Das mag zwar grundsätzlich so sein, in meinem Fall wird mit der "missbrauchten" Beschriftung nur die Ziffer des Buttens für die auf andere Weise der Filter gesetzt wird, farblich hervorgehoben, also lediglich eine selbsterklärende Information.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A JasperReport Detail bringt null bei Datenübergabe Allgemeine Java-Themen 4
R Datenübergabe: Java zu MS Word-Vorlage Allgemeine Java-Themen 6
W Jar-File Start nur über Terminal Allgemeine Java-Themen 13
A ByteArray über Socket Allgemeine Java-Themen 3
berserkerdq2 Text über einen Shape anzeigen (Scenebuilder) Allgemeine Java-Themen 1
I 2D-Grafik Vektor-Grafik über die Zwischenablage nach Adobe Illustrator transferieren Allgemeine Java-Themen 8
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
I OpenPDF erzeugt riesige PDFs, wenn Grafiken über PdfGraphics2D#drawImage gezeichnet werden Allgemeine Java-Themen 1
T Etikettendrucker über TCP-IP Allgemeine Java-Themen 1
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
Master3000 Java Konsole über Buffered Reader Zeilenweise auslesen ? Allgemeine Java-Themen 26
J Daten über serielle Schnittstelle empfangen Allgemeine Java-Themen 4
L Aufwandsabschätzung: Android-App Aufnahmefunktion (foto) und zweiter Ebene über dem Foto (teiltransparent) Allgemeine Java-Themen 6
M Registry Autostart Eintrag mit Java erstellen (über Windows cmd) Allgemeine Java-Themen 7
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
M Schnelleres Speichern von XML-Daten über URLConnection Allgemeine Java-Themen 4
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Threads über Kommandozeile Allgemeine Java-Themen 5
david19 Software AE über Domain laufen lassen Allgemeine Java-Themen 0
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
K Auf Dateiverzeichnis extern zugreifen (evtl über XML??) Allgemeine Java-Themen 22
C VisualVM oder Jconsole über Jolokia-Proxy Allgemeine Java-Themen 0
G USB-Pins über Java ansteuern Allgemeine Java-Themen 8
Ernesto95 Best Practice Localization über ResourceBundle Allgemeine Java-Themen 6
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
C Auslesen auslösen über Button-Click Allgemeine Java-Themen 8
M Fragen beantworten über Textfeldeingabe Allgemeine Java-Themen 5
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
T Strings über Bluetooth zwischen PC,µc oder Samrtphone senden und empfangen Allgemeine Java-Themen 0
F Try/catch über ganze Klasse Allgemeine Java-Themen 9
kodela Eigenartige Datumsberechnung über GregorianCalendar Allgemeine Java-Themen 15
HarleyDavidson Best Practice Integer-Zahlenfolge über mehrere Programmstarts Allgemeine Java-Themen 7
T .jar über cmd ausführen (später dann batch) Allgemeine Java-Themen 6
F In OSX: Java-Programm über URI-Scheme aufrufen mit Parameter? Allgemeine Java-Themen 0
C Input/Output Zip Files über Socket senden und empfangen Allgemeine Java-Themen 6
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
L Videodateien über Java öffnen unabhängig vom Format Allgemeine Java-Themen 4
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
F Content-Disposition ermitteln über URL Allgemeine Java-Themen 2
ARadauer Checksumme über BigDecimal Werte Allgemeine Java-Themen 11
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
G Darstellung von Ergebnissen einer Dokumentensuche über eine JTable Allgemeine Java-Themen 19
S VLC + Lied über Java starten Allgemeine Java-Themen 17
M HTML-Code von Webseite über Browser oder Console auslesen?? Allgemeine Java-Themen 5
A Sinuston ausgeben und über Mikro Amplitude messen – machbar? Allgemeine Java-Themen 6
R Java-Progamm über Icon starten unter Windows Allgemeine Java-Themen 9
C Daten über URL an PHP verschicken Allgemeine Java-Themen 4
O Fragen über Fragen - Bei Änderung XML-Datei -> Anpassung GUI Allgemeine Java-Themen 7
aze Jar ausführen über Runtime.execute funktioniert nicht Allgemeine Java-Themen 4
S NoSuchMethodError beim Ausführen einer C Methode über JNI Allgemeine Java-Themen 5
H OOP Daten über TCP Allgemeine Java-Themen 5
Pastafari Iterator über nested HashMaps Allgemeine Java-Themen 7
R ListIterator über mehrere Arrays Allgemeine Java-Themen 13
G Interface Laden der Konfiguration über Interfaces sinnvoll? Allgemeine Java-Themen 28
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
B VoIP-Gespräche über Computer führen Allgemeine Java-Themen 3
S Jar-File startet nicht über doppelklick Allgemeine Java-Themen 2
C Java Programm über SSH starten Allgemeine Java-Themen 16
K Internetverbindung über PuTTy herstellen?! Allgemeine Java-Themen 9
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
G Auf Kommandozeile über Processobjekt mit Outputstream Allgemeine Java-Themen 3
S Input/Output Binärdatei über Bytestreams Allgemeine Java-Themen 4
S Kommunikation von Core und GUI über Schnittstellen Allgemeine Java-Themen 2
J Explorer über Code starten Allgemeine Java-Themen 15
kodela Problem mit Kopieren über FileChannel Allgemeine Java-Themen 4
L Java und Javascript um Distanz über Google Maps zu berchnen Allgemeine Java-Themen 10
B UNIX Shell befehl über JavaCode ausführen Allgemeine Java-Themen 19
D Java Excel API - Schreiben in Excel lässt sich nicht über Makro starten Allgemeine Java-Themen 18
M Ampelsteuerung über Timer in Java realisieren Allgemeine Java-Themen 3
L CMD über Java öffnen Allgemeine Java-Themen 8
U Mailclient über getDesktop.mail vorbereiten, Problem beim Anhang: Allgemeine Java-Themen 3
R Klasse über Button Event in anderer Klasse informieren Allgemeine Java-Themen 11
R Frequenzausgabe (2 Kanal) über Lautsprecherausgang Allgemeine Java-Themen 22
J Java-Klasse über Konsole starten Allgemeine Java-Themen 6
E FF Einstellungen über Programm ändern? Allgemeine Java-Themen 7
D JVM kann nicht über die jvm.dll gestartet werden? Allgemeine Java-Themen 1
S File im windowexploer öffnen über java Allgemeine Java-Themen 6
J Receive eines Hex-Bytes über COM-Port Allgemeine Java-Themen 4
Nicer Prozess über Prozessnamen beenden Allgemeine Java-Themen 15
reibi File über FileChannel locken Allgemeine Java-Themen 5
B Serialisierung mit Unterobjekten über Netzwerk Allgemeine Java-Themen 3
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
B parallele / Multithreaded Iteration über Map Allgemeine Java-Themen 12
D Unix/Linux Benutzer-Authentifikation über Java Allgemeine Java-Themen 3
M Tastatur eingabe über Buttons Allgemeine Java-Themen 15
S GPS-Maus über USB ansprechen Allgemeine Java-Themen 8
reibi Files über Classpath laden Allgemeine Java-Themen 22

Ähnliche Java Themen


Oben