2016-09-30 10 views
1

Ich habe einen einfachen JDialog erstellt, der ein Label und einen Button enthält, das ist im Grunde genommen ein äquivalenter Informationsdialog. Im Dialog gibt es also eine Methode display(), in der ich setVisible (true) fünfmal aufgerufen habe.Java - setVisible (true)

Aus meiner Kenntnis, wenn diese Anzeige Methode aufgerufen wird, sollte es nur den Dialog anzeigen, aber es tatsächlich 5 Dialoge erstellt, Warum hat es 5 Dialoge erstellt?

Edit1: Mein Problem ist ähnlich, dies zu:

import java.awt.event.*;import java.awt.*;import javax.swing.*; 
class Demo implements ActionListener 
{ 
JFrame f; 
JButton b; 
DisplayDialog dialog; 
public Demo() 
{ 
    f = new JFrame(); 
    f.setSize(200,200); 

    b = new JButton("Click me"); 

    f.add(b); 
    dialog = new DisplayDialog(); 

    b.addActionListener(this); 
    f.setVisible(true); 
} 

public void actionPerformed(ActionEvent e) 
{ 
    Object o = e.getSource(); 

    if(o==b) 
    { 
     dialog.display("Hello"); 
     dialog.display("Hello"); 
     dialog.display("Hello"); 
     dialog.display("Hello"); 
     dialog.display("Hello5"); 
    } 
} 

public static void main(String args[]) 
{ 
    Demo d = new Demo(); 
} 

class DisplayDialog implements ActionListener 
{ 
     JDialog dg; 
     JLabel l; 
     JButton b; 
     Font myfont; 

     public DisplayDialog() 
     { 
      dg = new JDialog(f,"Alert!",true); 
      dg.setSize(300,150); 
      l = new JLabel("Message"); 
      b = new JButton("OK"); 

      myfont = new Font("Serif",Font.BOLD,12); 
      l.setFont(myfont); 

      dg.add(l); 
      dg.add(b,"South"); 

      dg.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 

      b.addActionListener(this); 
     } 

     public void actionPerformed(ActionEvent e) 
     { 
      Object o = e.getSource(); 
      if(o==b) 
      { 
       dg.setVisible(false); 
      } 
     } 

     public void display(String str) 
     { 
      l.setText(str); 
      dg.setVisible(true); 

     } 
    } 
} 

Edit2: Nun, wie dies eine Situation, in meinem Programm auftritt und anstatt den Dialog 5male Anzeige, mag ich es die letzten anzuzeigen Was kann ich tun, um dies zu erreichen?

+0

Und wo rufen Sie 'Display (String str)' ?? – Antoniossss

+0

@Antoniossss Erstellen Sie einfach ein Objekt und rufen Sie es mit einer Zeichenfolge Ihrer Wahl auf. In meinem Programm habe ich gerade ein neues JMenuItem hinzugefügt und Anzeige (String str) wird aufgerufen, wann immer es geklickt wird. –

+0

Aber es ist Ihr Beispiel, das nicht funktioniert, also geben Sie Ihren Code expecialy, dass dies von 'f' Variable (wahrscheinlich JFrame) abhängt, also wer weiß, dass Sie dort brechen könnten. – Antoniossss

Antwort

4

Ok basicly so ist es nicht 5mal auf einmal zeigt nur ist es 5-mal in Folge gezeigt.

JDialog.setVisible(true) ist ein Blockiervorgang und blockiert, bis der Dialog geschlossen wird.

So erscheint ein Dialog und App-Blöcke auf setVisible(true), wenn Sie es schließen, wird ein anderes serVisible(true) aufgerufen und so weiter. gleichen Dialog fünfmal mit mehreren Anrufen zu setVisible(true)

+0

Ok ich verstehe was du sagst. Jetzt bin ich in einer ähnlichen Situation fest: –

+0

@KaranNagpal Sie haben den Link nicht eingefügt. Wie auch immer, da dies Ihre Frage erfüllt, markieren Sie sie als akzeptiert und posten Sie eine andere. Ich werde versuchen, dort drüben zu helfen. – Antoniossss

+0

Ich habe die Frage bearbeitet, die meine Situation besser erklärt @Antoniossss –

0

Sie eine Dialoginstanz nur mit

dg = new JDialog(f,"Alert!",true); 

erstellen Dann ist dies Sie anzuzeigen.

0

Zu Ihrer Bearbeitung: Was ist Ihr Problem dann?

ändern

if (o == b) { 
    dialog.display("Hello"); 
    dialog.display("Hello"); 
    dialog.display("Hello"); 
    dialog.display("Hello"); 
    dialog.display("Hello5"); 
} 

zu

if (o == b) { 
     dialog.display("Hello"); 
    } 
+0

In meinem Hauptprogramm gibt es 4 interne Frames, die jeweils diesen Info-Dialog 4+ mal enthalten. Diese internen Rahmen sind miteinander verbunden, so dass manchmal eine Situation auftritt, in der diese Funktion 8 Mal aufgerufen wird. Daher möchte ich, dass es nur einmal anstelle von 8 Dialogfeldern angezeigt wird. @Antoniossss –

+0

Posten Sie entweder den Code, der tatsächlich widerspiegelt, was in Ihrer Situation passiert und zu dem Sie eine Lösung suchen, oder hören Sie auf, hier nach Hilfe zu suchen. Die Lösung für das von Ihnen gestellte Problem (auch mit Democode!) Besteht darin, 'display' nicht mehrmals hintereinander aufzurufen. Was hat dieses Beispiel mit deiner App zu tun, niemand weiß es, und ich denke, dass du das auch nicht weißt. Sie denken nur, dass dies Ihr Problem ist, aber für 99% ist es das nicht. – Antoniossss

+0

Der Anwendungscode besteht aus 1000 Zeilen und diese Situation tritt bei einer sehr spezifischen Eingabe auf. Ich muss nur wissen, was ich tun soll, damit, wann immer Anzeige (String str) aufgerufen wird, wenn dort schon ein Dialog geöffnet ist, dieser geschlossen wird. –

Verwandte Themen