我有一个主框架,我想使用卡片布局在中心位置显示我的 NewUser 类的对象。这是我的主类
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CardLayoutDemo implements ItemListener {
JPanel cards; //a panel that uses CardLayout
final static String BUTTONPANEL = "Card with JButtons";
final static String TEXTPANEL = "Card with JTextField";
public void addComponentToPane(Container pane) {
//Put the JComboBox in a JPanel to get a nicer look.
JPanel comboBoxPane = new JPanel(); //use FlowLayout
String comboBoxItems[] = { BUTTONPANEL, TEXTPANEL };
JComboBox cb = new JComboBox(comboBoxItems);
cb.setEditable(false);
cb.addItemListener(this);
comboBoxPane.add(cb);
//Create the "cards".
NewUser newUser = new NewUser();
JPanel card1 = new JPanel();
card1.add(new JButton("Button 1"));
card1.add(new JButton("Button 2"));
card1.add(new JButton("Button 3"));
JPanel card2 = new NewUser();
//Create the panel that contains the "cards".
cards = new JPanel(new CardLayout());
cards.add(card1, BUTTONPANEL);
cards.add(card2, TEXTPANEL);
pane.add(comboBoxPane, BorderLayout.PAGE_START);
pane.add(cards, BorderLayout.CENTER);
}
public void itemStateChanged(ItemEvent evt) {
CardLayout cl = (CardLayout)(cards.getLayout());
cl.show(cards, (String)evt.getItem());
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event dispatch thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("CardLayoutDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
CardLayoutDemo demo = new CardLayoutDemo();
demo.addComponentToPane(frame.getContentPane());
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
/* Use an appropriate Look and Feel */
try {
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
} catch (UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
} catch (InstantiationException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
/* Turn off metal's use of bold fonts */
UIManager.put("swing.boldMetal", Boolean.FALSE);
//Schedule a job for the event dispatch thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
这是我的 NewUser 类
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class NewUser extends JPanel {
private static final long serialVersionUID = 1L;
private JLabel lblUsername, lblPassword, lblConfirmMsg;
private JPasswordField txtPassword, txtCPassword;
private JTextField txtUsername, txtName;
private JButton btnSave, btnCancel;
JPanel panelNewUser;
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
public NewUser() {
this.setSize(350, 270);
this.setLocation((screen.width - 500) / 2, ((screen.height - 350) / 2));
this.setLayout(null);
panelNewUser= this;
lblUsername = new JLabel("Username");
lblPassword = new JLabel("Password");
lblConfirmMsg = new JLabel("Re-enter Password");
txtName = new JTextField();
txtUsername = new JTextField();
txtPassword = new JPasswordField();
txtCPassword = new JPasswordField();
btnSave = new JButton("Save");
btnCancel = new JButton("Cancel");
lblUsername.setBounds(30, 30, 100, 25);
this.add(lblUsername);
txtUsername.setBounds(150, 30, 150, 25);
this.add(txtUsername);
lblPassword.setBounds(30, 70, 100, 25);
this.add(lblPassword);
txtPassword.setBounds(150, 70, 150, 25);
this.add(txtPassword);
lblConfirmMsg.setBounds(30, 110, 110, 25);
this.add(lblConfirmMsg);
txtCPassword.setBounds(150, 110, 150, 25);
this.add(txtCPassword);
btnSave.setBounds(60, 155, 100, 25);
this.add(btnSave);
btnCancel.setBounds(180, 155, 100, 25);
this.add(btnCancel);
txtName.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (!(Character.isLetter(c) || (c == KeyEvent.VK_BACK_SPACE)
|| (c == KeyEvent.VK_SPACE) || (c == KeyEvent.VK_DELETE))) {
getToolkit().beep();
JOptionPane.showMessageDialog(null, "Invalid Character",
"ERROR", JOptionPane.ERROR_MESSAGE);
e.consume();
}
}
});
txtUsername.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (!(Character.isLetter(c) || (c == KeyEvent.VK_BACK_SPACE)
|| (Character.isDigit(c)) || (c == KeyEvent.VK_DELETE))) {
getToolkit().beep();
JOptionPane.showMessageDialog(null, "Invalid Character",
"ERROR", JOptionPane.ERROR_MESSAGE);
e.consume();
}
}
});
btnCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
resetField();
panelNewUser.setVisible(false);
System.out.println("hello");
}
});
btnSave.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
//DatabaseHelper databaseHelper = new DatabaseHelper();
if (txtUsername.getText() == null
|| txtUsername.getText().equals("")) {
JOptionPane.showMessageDialog(null, "Enter Username",
"Missing fields", JOptionPane.DEFAULT_OPTION);
txtUsername.requestFocus();
return;
}
if (txtPassword.getPassword() == null
|| txtPassword.getPassword().equals("")) {
JOptionPane.showMessageDialog(null, "Enter Password",
"Missing fields", JOptionPane.DEFAULT_OPTION);
txtPassword.requestFocus();
return;
}
if (txtCPassword.getPassword() == null
|| txtCPassword.getPassword().equals("")) {
JOptionPane.showMessageDialog(null,
"Confirm your password", "Missing fields",
JOptionPane.DEFAULT_OPTION);
txtCPassword.requestFocus();
return;
}
if (!txtPassword.getText()
.equals(txtPassword.getText())) {
JOptionPane.showMessageDialog(null,
"Passwords do not match.", "ERROR",
JOptionPane.DEFAULT_OPTION);
txtCPassword.requestFocus();
return;
}
if (true) {
JOptionPane.showMessageDialog(null,
"A new user is created", "SUCCESS",
JOptionPane.DEFAULT_OPTION);
resetField();
}
}
});
}// constructor closed
//action listener
public void resetField()
{
txtUsername.setText("");
txtCPassword.setText("");
txtPassword.setText("");
}
}// class closed
我希望 NewUser 的对象显示在主类的中心位置