簡體   English   中英

在父Applet方法中打開Java Applet或Frame並等待輸入

[英]Open java Applet or Frame inside a parent Applet method and wait for input

我有一個Java applet(讓我們稱之為parentApplet ),它有一個公共方法,它必須返回有關已執行操作狀態的信息(讓我們稱之為getUserInput() )。 此方法打開另一個需要用戶按鈕輸入的Applet,將其添加為具有add(childApplet)的子add(childApplet) ,然后將其自身(父項)添加為childApplet按鈕的ActionListner ,以便能夠在用戶運行其他方法時單擊childApplet的按鈕。

我的問題是,如何在用戶單擊childApplet按鈕之前暫停getUserInput()執行?

我試着有一個跟蹤返回信息的靜態變量,然后旋轉一段while(var == null) Thread.Sleep(1000); 但它會阻止主線程,因為它應該。

PS:將childApplet作為applet可以更改為任何可以更好地滿足在父applet之上打開另一個面板的要求的東西。

有關getUserInput()詳細信息

childApplet有一個畫布(來自BufferedImageGraphics對象),用戶可以在其上繪制和OK / Clear / Cancel按鈕。 當用戶按下OK時,我需要繪制BufferedImage 你知道這是否可以通過擴展JDialog來實現嗎?

你真的需要重組你的應用程序。 你不能按照你想要的方式去做。 嘗試使用輸入字段和確定/取消按鈕創建一個JDialog。 然后顯示對話框:

  MyDialog dialog = new MyDialog(null, true);  //true = modal
  //dialog.setModalityType(ModalityType.DOCUMENT_MODAL);  //or specify modal here
  dialog.setVisible(true);  //waits until dialog is closed
  if (dialog.wasAccepted()) {
    //grab values from dialog
    dialog.getCanvas();
  }

在對話框中,您將擁有:

  private boolean accepted = false;
  public boolean wasAccepted() {return accepted;}
  public Canvas getCanvas() {return canvas;}
  public ? getWhateverElseYouWant() {return ...;}

確定按鈕將:

accepted=true;
dispose();

取消按鈕將:

accepted=false;
dispose();

JDialog將在可見的情況下輸出事件。 因此setVisible()函數將暫停執行,直到對話框關閉。

這應該更好,然后您可以返回許多用戶輸入字段。 您甚至可以更改JDialog構造函數以傳遞默認值。

那個childApplet有一個畫布(一個來自BufferedImageGraphics對象),用戶可以在其上繪制和確定/清除/取消按鈕。 當用戶按下OK時,我需要繪制BufferedImage

首先,它不應該是一個applet而是一個JPanel (它不是不可能作為applet,但也不是無關緊要)。 然后,您可以通過三種方式之一顯示JPanel

  1. JOptionPane.showMessageDialog(..) 我們的想法是使用選項窗格中現成的OK / Cancel按鈕來告訴主應用程序。 是否實際使用圖像繪制。 我(作為用戶)傾向於期望Clear按鈕不在解除對話框的按鈕組中。 將該按鈕放在您傳遞到選項窗格的面板中。
  2. 模態JDialog 創建對話框比使用選項窗格更有效,但也更通用。 例如,如果放入對話框的面板具有“設置繪圖大小”選項,則調整對話框的大小比選項窗格更容易。
  3. CardLayout另一張卡片。 之前的兩個建議具有阻止應用程序的優勢。 和瀏覽器直到被解雇。 這很好,因為您可以在顯示后立即查詢繪圖的狀態,確信用戶已完成繪圖。 但不好的是,用戶可能會在屏幕上顯示對話框或選項窗格30分鍾,並且在那段時間內其他瀏覽器將無法訪問。 通過翻轉到顯示繪圖面板的卡片,瀏覽器不會被阻止,而應用程序也是如此。 一旦用戶進行了一個OK / Cancel選擇,就可以查詢繪圖的狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM