我正在制作一个程序,我不知道如何使它工作:我有一个mainFrame:
package itneizapenoitseg;
public class mainFrame extends JFrame {
private dbconnection database = new dbconnection(); // DB connetion data (login , passw ..)
private JDesktopPane desktop = new JDesktopPane(); // Need this to make Frame inside Frame
public mainFrame() {
super("");
setLayout(null);
setSize(850, 700);
setLocation(500, 280);
Login login = new Login(database);// I want to perform a login
desktop.add(login);
try {
login.setSelected(true);
}
catch (Exception e) {
// TODO: handle exception
}
setContentPane(desktop);
/////////////////////////////////////////
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String [] args) {
new mainFrame();
}
}登录类:
package itneizapenoitseg;
import... //
public class Login extends JInternalFrame {
// User and password fields
JTextField usernameForm = new JTextField(15);
JPasswordField passwordForm = new JPasswordField(15);
JButton login = new JButton("Login");
public Login(dbconnection database) {
super("Login", true, true, true, true);
setSize(300, 200);
// The login panel
JPanel panel = new JPanel();
panel.setLayout(null);
JLabel username = new JLabel("username :");
JLabel password = new JLabel("password :");
// Position
username.setBounds(70, 10, 80, 11);
password.setBounds(70, 55, 80, 17);
usernameForm.setBounds(70, 30, 150, 20);
passwordForm.setBounds(70, 75, 150, 20);
login.setBounds(105, 100, 80, 20);
// Addings elements to display panel
panel.add(usernameForm);
panel.add(passwordForm);
panel.add(login);
panel.add(password);
panel.add(username);
getContentPane().add(panel);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);// Doens't work
setVisible(true);
actionLogin(database);
}
// When pressing Login button...
private void actionLogin(dbconnection database) {
login.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//TODO Have to change to MySql query
String usname = usernameForm.getText();
String passw = new String(passwordForm.getPassword());
// Checking credencial
if(usname.equals("test") && passw.equals("1234")){
// Here i want to call a mainFrame funcion (createGUI)
dispose();Destroy this panel
} else{
JOptionPane.showMessageDialog(null, "Username or password wrong!");
usernameForm.setText("");
passwordForm.setText("");
usernameForm.requestFocus();
}
}
});
}
} 我希望当有人成功登录时,会调用大型机的函数createGui或通知mainFrame的方法。我的意图是使mainFrame成为空,直到某些人成功登录和下一次显示它的内容。
发布于 2014-10-02 14:54:51
非常类似于this SO question。
你可以叫((mainFrame) SwingUtilities.getWindowAncestor((Component)(e.getSource()))).createGUI();
希望这能有所帮助。
编辑:我刚刚测试的一个例子:
private void setHandlers() {
jButton2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
((mainFrame) SwingUtilities.getWindowAncestor((Component)(e.getSource()))).showAlert();
}
});
}
public void showAlert() {
JOptionPane.showConfirmDialog(this, "Confirming !!");
}还有另一种选择(使用频率较低--至少我是这样):
((mainFrame) SwingUtilities.getAncestorOfClass(mainFrame.class, ((Component)(e.getSource())))).createGUI();重新编辑:您也可以尝试:
((mainFrame) ((JComponent) (e.getSource())).getTopLevelAncestor()).createGUI();https://stackoverflow.com/questions/26162752
复制相似问题