Java JInternalFrame
我正在制作一个程序,但我不知道如何让它工作: 我有一个主机:Java JInternalFrame,java,jframe,jinternalframe,Java,Jframe,Jinternalframe,我正在制作一个程序,但我不知道如何让它工作: 我有一个主机: package itneizapenoitseg; public class mainFrame extends JFrame { private dbconnection database = new dbconnection(); // DB connetion data (login , passw ..) private JDesktopPane desktop = new JDesktopPane();
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,或者以一种方式通知大型机。我的意图是使大型机为空,直到sombody成功登录并下一次显示其内容 非常类似于
您可以调用((大型机)SwingUtilities.getWindow祖先((组件)(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) ((JComponent) (e.getSource())).getTopLevelAncestor()).createGUI();
它不起作用,因为我在actionListener中:(好的-那是因为你使用了一个匿名类-这很糟糕,但不是世界末日!使用(Component)e.getSource()
而不是这个,并检查它是否起作用。编辑了答案:)你对匿名类的意思是什么?但是现在我可以执行了,但是我得到了null指针异常;请检查我编辑的答案-我的评论有括号问题。要了解有关匿名类的更多信息,请参阅。
((mainFrame) ((JComponent) (e.getSource())).getTopLevelAncestor()).createGUI();