但是现在我需要它来配置Login框架并访问main.java中的另一个方法。如何从Login.java中的私有方法内部实现此目标?
在这里,您有一个设计问题。您不能调用任何框架的方法,因为您
ActionListener的范围仅限于
Login面板。如何解决呢?实现
ActionListener具有
足够 可视性 以放置框架的。
注意: 尽量避免使用NetBeans
GUI构建器(或任何GUI构建器)。这很容易,但是与您亲手制作相比,您会错过很多事情。您甚至可以编写更简洁的代码。但是有必要了解布局管理器
代码示例:此示例说明了您可以用少于一半的代码行实现相同的目的。
import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowEvent;import javax.swing.JButton;import javax.swing.Jframe;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.SwingUtilities;public class Demo { private void initGUI(){ final JTextField textField = new JTextField(20); final Jframe frame = new Jframe("Login"); frame.setDefaultCloseOperation(Jframe.DISPOSE_ON_CLOSE); JButton button = new JButton("Accept"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if("user".equals(textField.getText())){ frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING)); // or simply frame.dispose() } else { JOptionPane.showMessageDialog(null, "Wrong user! Keep trying.", "Login failed", JOptionPane.WARNING_MESSAGE); } } }); JPanel login = new JPanel(new FlowLayout()); login.add(new JLabel("User")); login.add(textField); login.add(button); frame.getContentPane().add(login); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new Demo().initGUI(); } }); }}


