2012-05-21 74 views
0

我有兩個類。 1.一個類包含由Netbeans GUI構建器生成的所有GUI代碼(稱爲GUI類) 2.另一個類包含一些包含方法的代碼(SaveTraffic,它擴展了SwingWorker)。從另一個類添加JFrame到主GUI框架

在我的SaveTraffic中,我創建了一個框架,當我運行我的應用程序時,它彈出並出現在我的GUI前面。我想將這個框架添加到我想要放置它的特定位置的GUI中。這怎麼可能?這是我的代碼SaveTraffic

public class SaveTraffic extends SwingWorker<Void, String> { 

    public static int k = 0; 
    public GUI f = new GUI(); 
    public static Frame u = new Frame(); 
    public static JTextArea h = new JTextArea(); 
    JScrollPane scrollPane2 = new JScrollPane(h, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
      JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 

    @Override 
    public Void doInBackground() throws IOException { 
     u.setSize(950, 200); 
     u.setLocation(0,550); 
     u.add(scrollPane2); 
     u.setVisible(true); 
     while (f.num() != 2) { 
      { 
       publish("Hello World"); 
      } 
     } 
     return null; 
    } //end main function 

    @Override 
    public void process(List<String> chunks) { 
     for (final String text : chunks) { 
      Runnable r = new Runnable() { 

       @Override 
       public void run() { 
        h.setLineWrap(true); 
        h.append(text + "\n"); 
       } 
      }; 
      new Thread(r).start(); 
     } 
    } 

    @Override 
    public void done() { 
     System.out.println("I am DONE"); 

    } 
} 

回答

0

您創建了一個類,它擴展了JPanel。然後你在那裏做所有的代碼,並將它與你的方法類綁定。

2

我看到你的代碼的幾個問題:

  1. 您正在尋找JDialog,而不是一個新的框架。確保將正確的Dialog所有者傳遞給JDialog的構造函數。您可以通過構造函數上的參數或通過調用setModal()來選擇對話框是否爲模態。
  2. 您正在SwingWorker.publish方法中啓動新的線程。那些線程修改UI。雖然JTextArea.append是線程安全的,我仍然不會使用多個線程來更新JTextArea。這是不必要的,如果有一天你添加了一些不是線程安全的調用,你將最終陷入死鎖。
  3. 您正在將組件添加到您的框架,並設置其大小並使其不在EDT上運行的SwingWorker.doInBackground()中可見。在EDT內部執行您的SwingWorker之前,請移動該調用。
  4. 不需要在textarea上不斷設置換行爲true。只需調用一次就足夠了。
  5. 我不確定'k'用於什麼,但我會提防靜態變量。
  6. 爲什麼你讓你的框架和你的TextArea是靜態的?

(可選)我也會考慮在SaveTraffic中添加一個構造函數並初始化那裏的大部分代碼。

2
  • 不建Swing GuiSwingWorker's方法,SwingWorker被指定爲add/modify/changeJComponent(s)已經存在

  • 添加process()publish()SwingWorker,這種方法把裏面的值或追加文本JTextArea定期爲

  • 爲「監測」SwingWorker's狀態添加PropertyChangeListener

  • simple example

+0

不上創造的SwingWorker的UI好一點。 (儘管它在那裏從來沒有想過要這麼做)+1 –