我需要爲一個帶有面板登錄的程序創建一個圖形用戶界面,在設置登錄後顯示真實軟件。用於軟件的Java Swing GUI,最好的方法
所以,問題是:
我應該創建兩幀並顯示第一的登錄名和第二的計劃?或者,最好在程序啓動時添加兩個不同的面板並隱藏登錄名?
我需要爲一個帶有面板登錄的程序創建一個圖形用戶界面,在設置登錄後顯示真實軟件。用於軟件的Java Swing GUI,最好的方法
所以,問題是:
我應該創建兩幀並顯示第一的登錄名和第二的計劃?或者,最好在程序啓動時添加兩個不同的面板並隱藏登錄名?
這有點主觀。對我來說,這將歸結爲應用程序的複雜程度,以及您是否需要支持多個會話,以及這些會話是否共享單個框架。
如果你的應用程序相對簡單(例如有一個或兩個視圖),我認爲它可以接受使用類似於CardLayout
,並簡單地在主應用程序框架內顯示登錄窗格,當用戶成功通過身份驗證時,切換到主視圖。
如果應用程序更復雜,我會考慮使用單獨的對話框。
即使您允許用戶進行多個會話,也會降低實際應用程序的複雜程度(恕我直言)是否會使用單獨的對話框。
我還會考慮用戶在登錄之前是否可以做任何事情,例如他們是否可以更新設置?如果是這樣,使用面板將是適合的,因爲登錄對話框最有可能是模態。
就我個人而言,我會先爲實際程序創建一個jFrame,然後(立即)打開一個jDialog窗口並在jFrame前打開它。 jDialog類有一個方便的屬性,當它打開時,你不能在你的其他框架上執行動作。所以它必須先關閉(在一些行爲之後,比如填寫密碼)。
使用框架的GlassPane是(假設你不需要使用下拉菜單)的選項。有些人可能會說,它的面板系統的濫用,但如果登錄屏幕是很簡單的,我認爲這是合法的。
的好處是,它已經存在供你使用(它不需要將應用程序顯著的變化),而且它吃任何事件(所以它們不會傳遞到實際的應用程序)。這也很容易顯示/隱藏。
垮臺是幾個Swing組件不會在玻璃板工作(JComboBox中就是一個例子)。
下面是使用玻璃面板的例子:?多JFrames,好/壞的做法的用途]
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class QuickTest {
public QuickTest(){
//Setup Frame
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
//Setup Main Content
JPanel main = new JPanel();
main.add(new JLabel("Here's the application!"));
frame.setContentPane(main);
//Setup login Screen
Box login = new Box(BoxLayout.Y_AXIS){
// Makes the main screen faded
public void paintComponent(Graphics g){
g.setColor(new Color(255,255,255,200));
g.fillRect(0,0, getWidth(), getHeight());
super.paintComponent(g);
}
};
login.add(new JLabel("Username here:"));
login.add(new JLabel("Password here:"));
JButton loginButton = new JButton("login");
loginButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frame.getGlassPane().setVisible(false);
}
});
login.add(loginButton);
login.add(Box.createVerticalGlue());
frame.setGlassPane(login);
frame.getGlassPane().setVisible(true);
//Show Frame
frame.setVisible(true);
}
public static void main(String[] args){
new QuickTest();
}
}
看到這個問題(http://stackoverflow.com/questions/9554636/the-use -of-多jframes好,壞的做法)+1到@MadProgrammers建議 –