Ich versuche, ein einfaches Menü für ein kleines Projekt mit einem JSpinner und JOptionPane zu erstellen. Ich habe meine gewünschte Ausgabe, aber wenn ich mit dem Fenster interagieren oder sogar über die Schaltflächen im Feld schweben, schafft sie visuelle Artefakte immer und immer wieder (siehe Bilder unten):Java JOptionPane Visual Artefakt von Fensterinteraktion
JOptionPane before mouse hover
Ich habe etwas recherchiert und dachte, es könnte daran liegen, dass JOptionPane nicht threadsicher ist, aber nichts zum Laufen bringen konnte.
Insgesamt ist meine spezifische Frage wie kann ich verhindern, dass Java diese visuellen Artefakte über mein JOptionPane-Fenster neu streichen?
Als Referenz finden Sie in die Methode, die ich dieses Menü zu zeigen, bin mit:
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SpinnerNumberModel;
import javax.swing.JSpinner;
public class Battleship
{
public static void main(String[] args)
{
SpinnerNumberModel battleshipRange = new SpinnerNumberModel(1, 1, 5, 1);
JSpinner rangeSpinner = new JSpinner(battleshipRange);
JOptionPane.showMessageDialog(null, rangeSpinner, "Battleship Number", JOptionPane.QUESTION_MESSAGE);
}
}
Ich verwende diesen Code auf BlueJ und ist mit Windows-10 Pro.
Vielen Dank im Voraus und Entschuldigung, wenn dies eine Anfängerfrage ist. Ich bin noch ziemlich neu im Programmieren.
EDIT: Aktualisierter Code, um vollständige Quelle des Problems zu geben, aber es verschwand. Ich werde es im Auge behalten, um zu sehen, wo die Fehlerquelle zuerst aufgetreten ist.
Posting 4 Zeilen Code hilft uns nicht. Veröffentlichen Sie eine ordnungsgemäße [mcve], die das Problem veranschaulicht. Das ist nach Ihrer Beschreibung des Problems alles, was Sie brauchen, ist ein Optionsfeld mit einem Drehfeld und natürlich eine main() -Methode, um das Optionsfenster anzuzeigen. Wahrscheinlichkeiten sind beim Erstellen des Beispiels, das Sie das Problem finden werden. – camickr
Ich habe meinen Code umstrukturiert, um ein richtiges Beispiel zu liefern, aber jetzt ist der Fehler verschwunden. Selbst das Neustarten meines Programms hat das Problem verschwinden lassen. Ich werde es im Auge behalten, während ich mein Programm entwickle, um zu sehen, ob das Problem wieder auftaucht. Danke für Ihre Rückmeldung. Es hat mir geholfen, dieses Problem zu verringern und wird mir helfen, in Zukunft bessere Fragen zu stellen. – Phillip