如何在運行時在Swing程序(Java)中添加和刪除組件(JButons,JTextField等),而無需使用NetBeans?我應該使用哪種佈局? 我希望用戶輸入用戶名&密碼,當他點擊提交按鈕時,會出現帶有新組件(JButtons,JTextField等)的新屏幕,我無法在運行時實現轉換。在運行時在Java(Swings)程序中添加並刪除JTextField
回答
你想使用兩個不同的面板來實現這個結果。使用同一個面板並刪除所有第一個組件並添加所有第二個組件並不是一個好主意。
製作一個LoginPanel類,它列出用戶名和密碼字段,標籤和提交按鈕。然後,當按下提交按鈕時,在登錄通過身份驗證後,隱藏登錄面板並顯示一個新的面板,其中包含您希望爲下一個屏幕設置的佈局。
這種方法使維護兩個面板變得更加容易,並且清楚地將它們的佈局和功能彼此分開。
您可以使用此代碼在現有的面板中心這個新框架:
public static void centerFrameOverComponent(JFrame frame, JComponent component) { Window parent = SwingUtilities.getWindowAncestor(component); Rectangle frameRect = frame.getBounds(); Rectangle parentRect = parent.getBounds(); int x = (int) (parentRect.getCenterX() - frameRect.getWidth()/2); int y = (int) (parentRect.getCenterY() - frameRect.getHeight()/2); frame.setLocation(x, y); }
登錄後,如果我將一個JFrame的可見性設置爲false,然後將另一個JFrame的可見性設置爲true,則新的JFrame不會與最後一幀在屏幕上的位置對齊(假定用戶通過拖動更改了先前的JFrame的對齊方式您可以給我一個解決方案嗎?我應該在JFrame中使用JPanel嗎? – Gaurav 2010-07-23 19:10:57
您可以在同一個框架中使用兩個面板並將它們交換出來,或者可以打開一個新框架並使用一些附加代碼居中: – 2010-07-23 19:30:18
,你可以創建thath延伸的JFrame exsample MyFrame一個新的類,以這種方式rapresetns新的窗口,在這個類,你必須在你的ContentPanel所有contolr添加的構造函數....
你可以添加一個jbutton到你的JFrame。
class MyFrame extends JFrame{
private JButton jb= new JButton("hello");
public MyFrame(){
setSize(new Dimension(300,180)); //set the MyFrame size
getContentPane().add(jb); //add your Component at ContentPane
}
}
登錄後,你能告訴這樣你的新框架:
new MyFrame().setVisible(true);
如果我將一個JFrame的可見性設置爲false,然後設置另一個JFrame的可見性(登錄後),則新的JFrame不會與最後一幀在屏幕上的位置對齊(假定用戶通過拖動更改了以前的JFrame的對齊方式窗戶。你能給我一個解決辦法嗎? – Gaurav 2010-07-23 18:55:39
一種方法是使用CardLayout
。您的登錄按鈕處理程序將檢查憑據並使用show()
來顯示第二個窗格。
附錄:爲安全起見,請考慮使用JPasswordField
作爲密碼;爲方便起見,用於定位框架的參數爲setLocationRelativeTo()
。
我認爲show()不推薦使用,應該使用setVisible(true) – 2010-07-23 19:33:16
@Phobia:'CardLayout#show()'不會被棄用。也許你正在考慮'Window#show()':http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/awt/Window.html – trashgod 2010-07-23 20:32:18
setLocationRelativeTO(null)是非常好的API中心對齊框架,感謝trashgod。 – Gaurav 2010-07-24 06:46:10
另一種方法是在您希望隱藏它時在特定組件上調用setVisible(false)
。
在我一直想添加/刪除整個子板的情況下,我使用了以下內容:
panel.remove(subPanel);
panel.revalidate();
panel.repaint();
你想打電話,只要你添加/刪除組件後兩種方法。
- 1. 在運行時添加和刪除行
- 2. 如何在運行時添加和刪除擴展程序?
- 3. 在運行時刪除/添加MessageHandlers
- 4. 在應用程序運行時,在java SWT應用程序中添加/刪除按鈕。
- 5. Java Spring - 在運行時添加和刪除篩選器
- 6. 在我的java程序中添加運行時間
- 7. 在運行時在mvc3中添加和刪除文本框
- 8. 在運行時在偵聽器中添加或刪除listenMulticast?
- 9. 如何在運行時刪除UIView並在appDelegate中添加另一個UIView?
- 10. 運行時間添加/刪除/更新Java中的Arraylist
- 11. 運行時添加/刪除組件
- 12. 在運行時從碼頭添加/刪除應用程序圖標?
- 13. 在單擊時添加幾行並在雙擊上刪除添加的行
- 14. 如何在運行時添加和刪除UIscrollview中的視圖?
- 15. 在NLog中運行時添加/刪除日誌文件
- 16. 刪除WebRTC並在Android應用程序中添加zeroMQ
- 17. JTextfield通過程序添加
- 18. 添加 - 刪除視圖在運行時在Android小部件
- 19. 嘗試在運行時添加資源時被刪除
- 20. Tablesorter在排序後添加刪除行
- 21. 程序運行時刪除類文件?
- 22. 在運行時刪除應用程序中的按鈕
- 23. 在java中添加和刪除trayicon?
- 24. 在sql中刪除表並添加
- 25. 在運行時在Selendroid中添加支持的應用程序
- 26. Java Swing:在運行時添加資源
- 27. Castle.DynamicProxy2並添加屬性在運行時
- 28. 刪除在運行時添加的控件
- 29. jQuery - 在添加和/或刪除類名時運行函數
- 30. 在運行時添加或刪除屬性
我碰到的這個問題之前,所有的答案爲止似乎對我好;我已經在不同的場景中使用過它們。 – Feanor 2010-07-23 15:15:24
考慮到他特別創建了用戶名/密碼面板,我不會選擇任何涉及將此面板用於其他目的的解決方案。這只是糟糕的設計練習。我可以想到其他情況下可以重複使用一個面板,但不是這個。 – 2010-07-23 15:52:22