Ich habe eine Java-Desktop-Anwendung mit einem Swing GUI. In der Menüleiste gibt es einen "About" Eintrag. Wenn Sie auf diesen "Über" -Menü klicken, wird ein JDialog mit JOptionPane.showMessageDialog (...) mit einem Icon, einem Text über mein Programm und einem "OK" -Button angezeigt, um den Dialog zu schließen.Java JOptionPane benutzerdefinierte zeichnen auf Hintergrund
Ich möchte einen Effekt von einer oder mehreren Kugeln (Kreise) zeichnen, die sich im Hintergrund des Dialogs bewegen und ihre Farben ändern.
AKTUALISIERT Code mit der Lösung von @Titus:
Individuelle JOptionPane Klasse:
class MyEffectPane extends JOptionPane {
public MyEffectPane(String message, int type){
super(message, type);
makeOpa(this);
}
// needed to make the drawings visible
void makeOpa(JComponent comp){
for(Component c : comp.getComponents()){
if(c instanceof JPanel){
JPanel p = (JPanel)c;
p.setOpaque(false);
makeOpa(p);
}
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int width = getWidth();
int height = getHeight();
g.setColor(Color.BLACK);
g.fillOval(width/2-50, height/2-50, 50, 50);
}
}
Call/Show-Dialog:
MyEffectPane pane = new MyEffectPane("message....", JOptionPane.INFORMATION_MESSAGE);
JDialog dialog = pane.createDialog(this, "About");
//dialog.setIconImage(icon.getImage());
dialog.setVisible(true);
dialog.dispose();
Die 'showMessageDialog' Methode ist' static' (Sie können sie nicht überschreiben) und sie erstellt ihr eigenes 'JOptionPane' Objekt. – Titus
@Titus Danke, kennst du eine Lösung für mein Problem? – trinity420
Verwenden Sie für Ihre Debugging-Anweisungen nicht 'System.out.println()'. Es wird nicht unbedingt bei jeder Ausführung eine Zeile gedruckt, da 'System.out' ein gepufferter Stream ist. Verwenden Sie stattdessen "System.err.println()" für die sofortige garantierte Ausgabe. –