Java 从当前JFrame打开新JFrame
我正在创建一个Java应用程序,其中有一个按钮。当按下该按钮时,我希望在其中输入一个包含Java 从当前JFrame打开新JFrame,java,swing,jframe,actionlistener,popupwindow,Java,Swing,Jframe,Actionlistener,Popupwindow,我正在创建一个Java应用程序,其中有一个按钮。当按下该按钮时,我希望在其中输入一个包含用户名、密码等字段的表单。在这种形式下,有一个Save按钮,按下该按钮后,将所有内容保存到一个文件中,并切换回第一个JFrame 我现在就是这样做的。这是第一个JFrame的按钮代码: public class FirstJFrame extends JFrame { private void newJFrameActionPerformed(java.awt.event.ActionEven
用户名
、密码
等字段的表单。在这种形式下,有一个Save
按钮,按下该按钮后,将所有内容保存到一个文件中,并切换回第一个JFrame
我现在就是这样做的。这是第一个JFrame的按钮代码:
public class FirstJFrame extends JFrame {
private void newJFrameActionPerformed(java.awt.event.ActionEvent evt) {
SecondJFrame pan = new SecondJFrame();
this.setVisible(false);
pan.setVisible(true);
}
}
这是第二个JFrame上的保存
按钮的代码:
public class SecondJFrame extends javax.swing.JFrame {
private void goBackActionPerformed(java.awt.event.ActionEvent evt) {
SecondJFrame pan = new SecondJFrame();
this.setVisible(false);
pan.setVisible(true);
}
}
这对我来说已经足够好了,但我有一种感觉,我根本没有做好这件事,我可能会造成内存泄漏,因为我每次都在创建一个新对象。我所做的是正确的还是有更好的方法?这确实不是最好的方法 如果您想从用户输入中收集一些数据,可以在“输入”对话框中使用JOptionPane。下面是一个代码示例,可以向您展示以下方法:
import javax.swing.*;
import java.awt.event.*;
public class ShowInputDialog{
public static void main(String[] args){
JFrame frame = new JFrame("Input Dialog Box Frame");
JButton button = new JButton("Show Input Dialog Box");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
JTextField xField = new JTextField(5);
JTextField yField = new JTextField(5);
JPanel myPanel = new JPanel();
myPanel.add(new JLabel("x:"));
myPanel.add(xField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer
myPanel.add(new JLabel("y:"));
myPanel.add(yField);
int result = JOptionPane.showConfirmDialog(null, myPanel,
"Please Enter X and Y Values", JOptionPane.OK_CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
System.out.println("x value: " + xField.getText());
System.out.println("y value: " + yField.getText());
}
}
});
JPanel panel = new JPanel();
panel.add(button);
frame.add(panel);
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
见是;在很多平台上都是这样的,我想我现在明白了。基本上,我在
对话框中放置了一个新面板,而不是一起创建一个新的JFrame
。谢谢你,真的。JOptionPane有许多有趣的对话框,完全可以自定义!我决定将整个面板放在一个不同的类中,以使我的代码看起来更干净,但问题是当我按下OK按钮时,我无法从JFrame访问字段。我可以在面板中有另一个名为save
的按钮,但是如果有这样的额外按钮,那就太糟糕了,在按下OK
之后,有没有办法访问JPanel中存储的值?我已经尝试了myPanel.xField
,但netbeans不允许我将成员变量从private更改为public。您必须将pannel作为参数传递给新类。最好创建另一个类,这样代码看起来更可读。只需将它传递给构造函数,您就可以使用它了