Java,从另一个帧/类关闭一个帧
我正在制作一个java程序,我需要关闭一个框架。 当我点击搜索图标时,一个Java,从另一个帧/类关闭一个帧,java,swing,jframe,frame,Java,Swing,Jframe,Frame,我正在制作一个java程序,我需要关闭一个框架。 当我点击搜索图标时,一个ActionListener将做出反应,并用4个额外的按钮生成相同的框架。 现在我有两个画面(一个上面有4个额外的按钮,另一个没有)。 如何关闭没有按钮的框架,使“框架”关闭,“框架1”保持打开状态? 我的代码: 我试过frame.dispose();但是这不起作用。您应该使用卡片布局,而不是使用多个窗口,并且只需在视图之间切换 通常,我会有一个很好的中央控制器/模型来实现这一点,但我只是简单地修改了你的代码来演示这个想
ActionListener
将做出反应,并用4个额外的按钮生成相同的框架。
现在我有两个画面(一个上面有4个额外的按钮,另一个没有)。
如何关闭没有按钮的框架,使“框架”关闭,“框架1”保持打开状态?
我的代码:
我试过frame.dispose();但是这不起作用。您应该使用
卡片布局,而不是使用多个窗口,并且只需在视图之间切换
通常,我会有一个很好的中央控制器/模型来实现这一点,但我只是简单地修改了你的代码来演示这个想法
创建主框架时,将其布局管理器设置为CardLayout
,然后添加两个面板
public class Adresboek extends JFrame {
//opstartclasse
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
//maak een frame
JFrame frame = new Adresboek();
frame.setSize(335, 395);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Adresboek");
frame.setLayout(new CardLayout());
// These are the available views...
frame.add(new Gast1(), "Gast");
frame.add(new Beheer1(), "Beheer");
frame.setVisible(true);
}
});
}
当触发instellingenhandler
actionPerformed
方法时,只需切换视图
class instellingenhandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("...");
JRootPane rootPane = SwingUtilities.getRootPane(Gast1.this);
CardLayout layout = (CardLayout) rootPane.getContentPane().getLayout();
layout.show(rootPane.getContentPane(), "Beheer");
}
}
请查看以了解更多详细信息
像素完美布局是现代GUI界面设计中的一种错觉。您不控制不同平台的渲染管道,每个平台都将更改渲染某些ui元素(如字体)所需的像素量。这将使你的机器上的布局“完美”,并变成别人的胡言乱语。使用适当的布局管理器
看一看
您还可能会发现并值得一读您需要为另一个类提供指向原始帧的指针,以便实际使用其dispose方法。
而且,所有的静态类都有点多。我建议在需要的地方使用匿名内部类型
这正是你想要的
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.font.*;
import java.awt.image.*;
// hoofdclasse
public class Adresboek extends JFrame {
// opstartclasse
public static void main(String[] args) {
// maak een frame
JFrame frame = new Adresboek();
frame.setSize(335, 395);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Adresboek");
frame.setContentPane(new Gast1(frame));
// frame.setContentPane(new Beheer1());
frame.setVisible(true);
frame.setResizable(false);
}
// het paneel
static class Gast1 extends JPanel {
// de knoppen, textvelden en labels
private JTextField TF1_VNaam, TF1_TussenVoegsel, TF1_ANaam, TF1_Straat, TF1_SNummer, TF1_Postcode,
TF1_Plaatsnaam, TF1_GD, TF1_Tel, TF1_Email, TF1_Zoeken;
private JLabel L1_VNaam, L1_TussenVoegsel, L1_ANaam, L1_Straat, L1_Postcode, L1_Plaatsnaam, L1_GD, L1_Tel,
L1_Email;
private JButton B1_Instellingen, B1_Zoeken, B1_Vorige, B1_Volgende;
public Gast1(final JFrame maker) {
super();
// layout manager uit
setLayout(null);
// Textvelden
TF1_VNaam = new JTextField(10);
TF1_TussenVoegsel = new JTextField(10);
TF1_ANaam = new JTextField(10);
TF1_Straat = new JTextField(10);
TF1_SNummer = new JTextField(10);
TF1_Postcode = new JTextField(10);
TF1_Plaatsnaam = new JTextField(10);
TF1_GD = new JTextField(10);
TF1_Tel = new JTextField(10);
TF1_Email = new JTextField(10);
TF1_Zoeken = new JTextField(10);
// Labels
L1_VNaam = new JLabel("Voornaam:");
L1_TussenVoegsel = new JLabel("Tussenvoegsel:");
L1_ANaam = new JLabel("Achternaam:");
L1_Straat = new JLabel("Straat + Nr:");
L1_Postcode = new JLabel("Postcode:");
L1_Plaatsnaam = new JLabel("Plaatsnaam:");
L1_GD = new JLabel("Geboortedatum:");
L1_Tel = new JLabel("Telefoon:");
L1_Email = new JLabel("E-mail:");
// Knoppen
ImageIcon login2 = new ImageIcon(getClass().getResource("instellingen.png"));
B1_Instellingen = new JButton(login2);
ImageIcon search = new ImageIcon(getClass().getResource("search.png"));
B1_Zoeken = new JButton(search);
B1_Vorige = new JButton("<<");
B1_Volgende = new JButton(">>");
// plaatsing
// textvelden
TF1_VNaam.setBounds(110, 50, 210, 25);
TF1_TussenVoegsel.setBounds(110, 80, 210, 25);
TF1_ANaam.setBounds(110, 110, 210, 25);
TF1_Straat.setBounds(110, 140, 160, 25);
TF1_SNummer.setBounds(275, 140, 45, 25);
TF1_Postcode.setBounds(110, 170, 210, 25);
TF1_Plaatsnaam.setBounds(110, 200, 210, 25);
TF1_GD.setBounds(110, 230, 210, 25);
TF1_Tel.setBounds(110, 260, 210, 25);
TF1_Email.setBounds(110, 290, 210, 25);
TF1_Zoeken.setBounds(10, 330, 140, 26);
// labels
L1_VNaam.setBounds(10, 50, 90, 25);
L1_TussenVoegsel.setBounds(10, 80, 90, 25);
L1_ANaam.setBounds(10, 110, 90, 25);
L1_Straat.setBounds(10, 140, 90, 25);
L1_Postcode.setBounds(10, 170, 90, 25);
L1_Plaatsnaam.setBounds(10, 200, 90, 25);
L1_GD.setBounds(10, 230, 95, 25);
L1_Tel.setBounds(10, 260, 90, 25);
L1_Email.setBounds(10, 290, 90, 25);
// knoppen
B1_Instellingen.setBounds(265, 10, 50, 25);
B1_Zoeken.setBounds(155, 330, 50, 25);
B1_Vorige.setBounds(210, 330, 50, 25);
B1_Volgende.setBounds(265, 330, 50, 25);
// Font
Font Font1 = new Font(B1_Instellingen.getFont().getName(), B1_Instellingen.getFont().getStyle(), 11);
Font Font2 = new Font(B1_Zoeken.getFont().getName(), B1_Zoeken.getFont().getStyle(), 11);
Font Font3 = new Font(B1_Vorige.getFont().getName(), B1_Vorige.getFont().getStyle(), 11);
Font Font4 = new Font(B1_Volgende.getFont().getName(), B1_Volgende.getFont().getStyle(), 11);
// instellen Font
B1_Instellingen.setFont(Font1);
B1_Zoeken.setFont(Font2);
B1_Vorige.setFont(Font3);
B1_Volgende.setFont(Font4);
// het toevoegen van de velden, labels en knoppen
// toevoegen velden
add(TF1_VNaam);
add(TF1_TussenVoegsel);
add(TF1_ANaam);
add(TF1_Straat);
add(TF1_SNummer);
add(TF1_Postcode);
add(TF1_Plaatsnaam);
add(TF1_GD);
add(TF1_Tel);
add(TF1_Email);
add(TF1_Zoeken);
// toevoegen labels
add(L1_VNaam);
add(L1_TussenVoegsel);
add(L1_ANaam);
add(L1_Straat);
add(L1_Postcode);
add(L1_Plaatsnaam);
add(L1_GD);
add(L1_Tel);
add(L1_Email);
// toevoegen knoppen
add(B1_Instellingen);
add(B1_Zoeken);
add(B1_Vorige);
add(B1_Volgende);
//Anonymous inner classes FTW
B1_Zoeken.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.out.println("Hello Bestand!");
JFrame frame1 = new Adresboek();
frame1.setSize(335, 395);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setTitle("Adresboek1");
frame1.setContentPane(new Beheer1(frame1));
frame1.setVisible(true);
frame1.setResizable(false);
maker.dispose();
}
});
}// sluit de constructor af
}
// Class Beheer
static class Beheer1 extends Gast1 {
// de knoppen, textvelden en labels
private JButton B1_Wijzigen, B1_Aanmaken, B1_Verwijderen, B1_Opslaan, B1_Instellingen;
public Beheer1(JFrame maker) {
super(maker);
// Images Knoppen
ImageIcon edit = new ImageIcon(getClass().getResource("aanpas.png"));
ImageIcon add = new ImageIcon(getClass().getResource("nieuw.png"));
ImageIcon delete = new ImageIcon(getClass().getResource("verwijderen.png"));
ImageIcon save = new ImageIcon(getClass().getResource("opslaan.png"));
ImageIcon login = new ImageIcon(getClass().getResource("instellingen.png"));
// Knoppen Aanmaken
B1_Wijzigen = new JButton(edit);
B1_Aanmaken = new JButton(add);
B1_Verwijderen = new JButton(delete);
B1_Opslaan = new JButton(save);
B1_Instellingen = new JButton(login);
// Plaatsing
this.B1_Wijzigen.setBounds(10, 10, 50, 25);
this.B1_Aanmaken.setBounds(62, 10, 50, 25);
this.B1_Verwijderen.setBounds(114, 10, 50, 25);
this.B1_Opslaan.setBounds(166, 10, 50, 25);
this.B1_Instellingen.setBounds(265, 10, 50, 25);
// Knoppen Toevoegen
add(B1_Wijzigen);
add(B1_Aanmaken);
add(B1_Verwijderen);
add(B1_Opslaan);
add(B1_Instellingen);
}
}
}
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.awt.font.*;
导入java.awt.image.*;
//蹄类
公共类Adresboek扩展JFrame{
//OPSTARTCLASS
公共静态void main(字符串[]args){
//马田架
JFrame=new Adresboek();
框架。设置尺寸(335395);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
帧。设置标题(“Adresboek”);
frame.setContentPane(新Gast1(frame));
//setContentPane(新的Beheer1());
frame.setVisible(true);
frame.setresizeable(false);
}
//黑斑鳗
静态类Gast1扩展了JPanel{
//de knoppen,textvelden en标签
私人JTextField TF1_VNaam、TF1_TussenVoegsel、TF1_ANaam、TF1_Straat、TF1_SNummer、TF1_邮编、,
TF1_Plaatsnaam、TF1_GD、TF1_电话、TF1_电子邮件、TF1_Zoeken;
私人JLabel L1_VNaam、L1_TussenVoegsel、L1_ANaam、L1_Straat、L1_邮编、L1_Plaatsnaam、L1_GD、L1_电话、,
L1_电子邮件;
私人JButton B1_Instellingen、B1_Zoeken、B1_Vorige、B1_Volgende;
公共Gast1(最终框架制造商){
超级();
//布局管理器
setLayout(空);
//特克斯维登
TF1_VNaam=新的JTextField(10);
TF1_TussenVoegsel=新的JTextField(10);
TF1_ANaam=新的JTextField(10);
TF1_Straat=新的JTextField(10);
TF1_SNummer=新的JTextField(10);
TF1_邮政编码=新的JTextField(10);
TF1_Plaatsnaam=新的JTextField(10);
TF1_GD=新的JTextField(10);
TF1_Tel=新的JTextField(10);
TF1_Email=新的JTextField(10);
TF1_Zoeken=新的JTextField(10);
//标签
L1_VNaam=新的JLabel(“Voornaam:”);
L1_TussenVoegsel=新JLabel(“TussenVoegsel:”);
L1_ANaam=新的JLabel(“Achternaam:”);
L1_Straat=新的JLabel(“Straat+Nr:”);
L1_邮政编码=新的JLabel(“邮政编码:”);
L1_Plaatsnaam=新JLabel(“Plaatsnaam:”);
L1_GD=新的JLabel(“Geboortedatam:”);
L1_Tel=新的JLabel(“Telefoon:”);
L1_电子邮件=新的JLabel(“电子邮件:”);
//克诺彭
ImageIcon login2=新的ImageIcon(getClass().getResource(“instellingen.png”);
B1_Instellingen=新的JButton(login2);
ImageIcon search=新的ImageIcon(getClass().getResource(“search.png”);
B1_Zoeken=新的JButton(搜索);
B1_Vorige=新的按钮(“”);
//编辫
//特克斯维登
TF1_VNaam.立根(110,50,210,25);
TF1_TussenVoegsel.立根(110,80,210,25);
TF1_ANaam.立根(110、110、210、25);
TF1(110、140、160、25);
TF1_缓冲区立根(275、140、45、25);
TF1_邮政编码:setBounds(110、170、210、25);
TF1_Plaatsnaam.立根(110、200、210、25);
TF1_GD.立根(110、230、210、25);
TF1_电话:setBounds(110、260、210、25);
TF1_Email.setBounds(110290210,25);
TF1_Zoeken.挫折(10330140,26);
//标签
一级立根(10,50,90,25);
L1_TussenVoegsel.立根(10,80,90,25);
L1_ANaam.立根(10,110,90,25);
一级水平立根(10、140、90、25);
L1_邮政编码。立根(10、170、90、25);
L1_Plaatsnaam.立根(10200,90,25);
L1_GD.立根(10230,95,25);
L1_电话:setBounds(10260、90、25);
L1_电子邮件。挫折(10290,90,25);
//克诺彭
B1_Instellingen.立根(265,10,50,25);
B1_Zoeken.立根(155、330、50、25);
B1_Vorige.立根(210、330、50、25);
B1_Volgende.立根(265,330,50,25);
//字体
Font Font1=新字体(B1_Instellingen.getFont().getName(),B1_Instellingen.getFont().getStyle(),11);
Font Font2=新字体(B1_Zoeken.getFont().getName(),B1_Zoeken.getFont().getStyle(),11);
Font Font3=新字体(B1_Vorige.getFont().getName(),B1_Vorige.getFont().getStyle(),11);
Font Font4=n