[英]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
有一個畫布(來自BufferedImage
的Graphics
對象),用戶可以在其上繪制和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
有一個畫布(一個來自BufferedImage
的Graphics
對象),用戶可以在其上繪制和確定/清除/取消按鈕。 當用戶按下OK時,我需要繪制BufferedImage
。
首先,它不應該是一個applet而是一個JPanel
(它不是不可能作為applet,但也不是無關緊要)。 然后,您可以通過三種方式之一顯示JPanel
。
JOptionPane.showMessageDialog(..)
。 我們的想法是使用選項窗格中現成的OK / Cancel按鈕來告訴主應用程序。 是否實際使用圖像繪制。 我(作為用戶)傾向於期望Clear按鈕不在解除對話框的按鈕組中。 將該按鈕放在您傳遞到選項窗格的面板中。 JDialog
。 創建對話框比使用選項窗格更有效,但也更通用。 例如,如果放入對話框的面板具有“設置繪圖大小”選項,則調整對話框的大小比選項窗格更容易。 CardLayout
另一張卡片。 之前的兩個建議具有阻止應用程序的優勢。 和瀏覽器直到被解雇。 這很好,因為您可以在顯示后立即查詢繪圖的狀態,確信用戶已完成繪圖。 但不好的是,用戶可能會在屏幕上顯示對話框或選項窗格30分鍾,並且在那段時間內其他瀏覽器將無法訪問。 通過翻轉到顯示繪圖面板的卡片,瀏覽器不會被阻止,而應用程序也是如此。 一旦用戶進行了一個OK / Cancel選擇,就可以查詢繪圖的狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.