Java 如何从其他服务器处理打开的Jframe
您好,我想知道如何从另一个jFrame中处置一个jFrame,因为我想创建一个该类的新实例,在其文本字段中使用新值,所以第一个jFrame如下:Java 如何从其他服务器处理打开的Jframe,java,swing,oop,actionlistener,Java,Swing,Oop,Actionlistener,您好,我想知道如何从另一个jFrame中处置一个jFrame,因为我想创建一个该类的新实例,在其文本字段中使用新值,所以第一个jFrame如下: public class Frame1 extends javax.swing.JFrame implements ActionListener { Frame2 f; public Frame1() { initComponents(); this.setLocationRelativeTo(null)
public class Frame1 extends javax.swing.JFrame implements ActionListener {
Frame2 f;
public Frame1() {
initComponents();
this.setLocationRelativeTo(null);
}
private void rbtnShowFrame2ActionPerformed(java.awt.event.ActionEvent evt) {
f = new Frame2();
f.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
this.dispose(); //I TRIED TO DISPOSING IT HERE BUT DOESN'T WORK
}
}
因此,我希望在另一个jFrame中,仅当我触发botton执行的事件操作时才处理jFrame1,如果不发生这种情况,我不想处理它,我不知道是否可以使用ActionListener处理它,这是第二个jFrame:
public class Frame2 extends javax.swing.JFrame {
public Frame2() {
initComponents();
this.setLocationRelativeTo(null);
Frame1 f1 = new Frame1();
this.cmdOk.addActionListener(cGUI);
}
private void cmdOkActionPerformed(java.awt.event.ActionEvent evt) {
//Here is where i want to dispose() the other jFrame1
//to create a new instance and pass the value using public static jTextFields
f1.labelNumeroCotizacion.setText(this.labelNumCotizacionEnviar.getText());
f1.setVisible(true);
}
}
对不起,我的代码,我是使用OOP的新手!感谢大家……下面是一个如何从另一个JFrame处理JFrame的示例:
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Demo
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
FrameA one = new FrameA();
FrameB two = new FrameB(one);
one.setVisible(true);
two.setVisible(true);
}
});
}
}
class FrameA extends JFrame
{
private static final long serialVersionUID = 1812279930292019387L;
public FrameA()
{
super("Frame A");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 400);
setLocationRelativeTo(null);
setResizable(false);
}
}
class FrameB extends JFrame
{
private static final long serialVersionUID = 5126089271972476434L;
public FrameB(final JFrame otherFrame)
{
super("Frame B");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 400);
setLayout(new GridBagLayout());
setLocationRelativeTo(otherFrame);
JButton button = new JButton("Dispose Other");
button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
otherFrame.dispose();
}
});
add(button);
setResizable(false);
}
}
旁注:您真的想用另一个框架替换一个框架吗?换个里面的面板怎么样?或者,如果只是关于文本字段值,那么对框架中的字段调用
set
方法如何。我只是想更改jTextFields中的值,但我不知道是否只能使用setter和getter,因为我发现的唯一方法是使用新实例,但我不知道你是否能帮我带来另一个想法,谢谢你的回答!在Frame1中生成文本字段的成员变量。然后给Frame1一个set方法,用于调用field.setText(text)
的每个字段,或者给Frame1一个大的setData
方法,其中一个复合对象包含所有作为成员的值。好的,我明白,我遇到的问题是我必须从另一个类创建一个实例,要执行jTextFields的getter和setter,我必须创建一个新对象,并且我不能将值传递给早期的jFrame…您需要在Frame2中保留对Frame1实例的引用。想要处理它或使用setter也是一样的。看看令人敬畏的代码。他正在将FrameA的实例传递给FrameB的构造函数。酷,如果你的问题由这个问题回答,那么接受它来结束这个问题。如果你有任何疑问,也可以在评论部分询问。听着,我不知道该把代码放在哪里,在我的例子中,我想关闭jFrame2按钮中的jFrame1,那么你能给我一个如何把代码放到我的代码中的线索吗?因为我已经试过了,但我做不到!如果您再次看到我的代码,则单击FrameB
中的按钮,就会关闭FrameA
。在按钮中添加actionListener
,然后调用jFrame1
上的dispose
方法。你需要将jFrame1
的引用传递给你的jFrame2
类,这样它就可以在按钮的actionPerformed
方法中使用它。复制粘贴我的代码到你的IDE中,然后编译并运行它来获得这个想法。很高兴我能提供帮助。:)