2016-09-30 115 views
1

我做了一個簡單的JDialog,它包含一個標籤和一個按鈕,它基本上相當於一個信息對話框。所以在對話框中有一個方法display(),其中我調用了setVisible(true)五次。Java - setVisible(true)

據我所知,當這個顯示方法被調用時,它應該只顯示一次對話框,但它實際上創建了5個對話框,爲什麼它會創建5個對話框?

EDIT1:我的問題是更類似於此:

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:現在,這樣的情況在我的計劃,而不是顯示對話框5次發生,我希望它顯示最後一個,我能做些什麼來實現這一目標?

+0

哪裏你叫'顯示(字符串str)'? – Antoniossss

+0

@Antoniossss只需創建一個對象並用您選擇的字符串調用它即可。 在我的程序中,我只是添加了一個新的JMenuItem,並在被點擊時調用display(String str)。 –

+0

但是這是你的例子,不工作,所以提供你的代碼,特別是這取決於'f'變量(可能是JFrame),所以誰知道你可以在那裏突破的帽子。 – Antoniossss

回答

4

好吧,基本上它是一次不顯示5次只顯示連續5次

JDialog.setVisible(true)是一個阻塞操作,並阻塞,直到對話框關閉。

所以當你關閉它時,彈出一個對話框和setVisible(true)上的應用程序塊,另一個對話框serVisible(true)被調用等等。

+0

好吧,我明白你在說什麼。現在我被困在更類似於這樣的情況: –

+0

@KaranNagpal你沒有粘貼鏈接。無論如何,因爲這充分滿足您的問題,請將其標記爲已接受併發布另一個問題。我試圖幫助那裏。 – Antoniossss

+0

我編輯了更好地解釋我的情況的問題@Antoniossss –

0

你只創建

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

一個對話框實例,然後你用多次調用setVisible(true)顯示此相同的對話框五倍。

0

至於你的編輯:那麼你的問題是什麼?

變化

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

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

在我的主程序中,有4個內部框架,每個框架包含4次以上的信息對話框。這些內部框架是相互關聯的,所以有時出現這種功能被調用8次以上的情況。所以我希望它只出現一次而不是8個對話框。 @Antoniossss –

+0

可以發佈實際反映您的情況以及您正在尋求解決方案的情況的代碼,或者在此處停止搜索幫助。您提供的問題的解決方案(即使使用Demo代碼!)也不要一個接一個地調用'display'多次。這個示例和你的應用有什麼關係,沒有人知道,我認爲你也不知道。你只會認爲這與你的問題是一樣的,但是對於99%而言不是這樣。 – Antoniossss

+0

應用程序代碼是1000行,這種情況發生在一個非常特定的輸入。 我只需要知道我該做什麼,以便每當display(String str)被調用時,如果有一個對話框已經打開,它會被關閉。 –

相關問題