我有两个JFrames
(frameA
和FrameB
)。 frameB
只能从frameA
打开,当我打开frameB
时,frameA
必须保持打开状态。 frameB
有一个按钮(Close_frameA
)。我想点击按钮关闭frameA
。
我该怎么做?
答案 0 :(得分:0)
您可以使用以下两个类:TJFrame和OpenFrame,使用另一个JFrame中的按钮关闭JFrame类
public class TJFrame {
public static OpenFrame openWindow;
public static void main(String[] args) {
JFrame frame = new JFrame("Swing Frame");
JButton button = new JButton("Open");
frame.add(button);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
openWindow = new OpenFrame();
openWindow.setVisible(true);
}
});
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.setSize(350, 200);
frame.setVisible(true);
}}
public class OpenFrame extends JFrame{
JPanel back_panel;
public JButton button = new JButton("Cross");
public OpenFrame() {
back_panel = new JPanel();
setContentPane(back_panel);
this.setSize(350, 200);
button.setBounds(380, 10, 20, 20);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
back_panel.add(button);
}}
答案 1 :(得分:0)
首先,每个JFrame是由不同的类别制作的(我会这样认为,因为我不知道如何制作两个帧)。
尝试的可能解决方案: 在框架A中,创建一个"静态变量":
//lets call the class that create frameA ClassA
public class ClassA extends JFrame {
static JFrame frameA;
而不是
JFrame frameA=new JFrame("Name of the frame");
在public static void main(String [] args)。然后,在public static void main(String [] args)程序中,做
//the static JFrame assigned before
frameA= new JFrmae("Nameof the frame");
这让frameB中的程序读取" frameA"使用ClassB中的以下代码(让我们调用构成frameB ClassB的类):
JFrame frameA= ClassA.frameA;
然后,仍然在ClassB中,我们可以做
frameA.dispose();
我希望你理解(如果你不理解,请评论你不明白的事情),我希望它有效。
代码:
import javax.swing.JFrame;
public class ClassA {
static JFrame frameA;
public ClassA(){
//a useless constructor because I am not adding any Listeners(don't worry about it)
}
public static void main(String[] args){
frameA=new JFrame("Name");
//your ordinary things(some peiople put these in the constructor)
frameA.setSize(300,300);
frameA.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frameA.setVisible(true);
//runs ClassB
new ClassB();
}
}
和
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ClassB extends JFrame implements ActionListener{
static JButton close=new JButton("close");
public ClassB(){
//your ordinary thigns
add(close);
setSize(300,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
close.addActionListener(this);
System.out.println("what?");
}
public static void main(String[] args){
JFrame frameB=new JFrame("Clae Frame A");
}
@Override
public void actionPerformed(ActionEvent arg0) {
if(arg0.equals("close")){
JFrame frameA=ClassA.frameA;
frameA.dispose();
}
}
}