java frame清除控件_java – 清除JFrame的组件并添加新组件

我有一个JFrame,它有一些选项.当按下OK按钮时,我想要相同的JFrame清除内容并添加新内容.我试过了,但问题是新的JFrame被弹出.我究竟做错了什么?

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.IOException;

import java.net.InetAddress;

import java.net.UnknownHostException;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.swing.*;

public class GuiFrame extends JFrame {

final JFrame f = new JFrame("Test");

public void Starter(){

ImageIcon img = new ImageIcon("C:\Users\neal\Desktop\no.png");

f.setIconImage(img.getImage());

ButtonGroup group = new ButtonGroup();

final JRadioButton Acess = new JRadioButton("Acess");

final JRadioButton Chat = new JRadioButton("Chat");

group.add(Acess);

group.add(Chat);

f.setSize(400,100);

f.setLocationRelativeTo(null);

JButton OptionOk = new JButton("OK");

Label option = new Label("Choose a Option");

final Container content = f.getContentPane();

content.setBackground(Color.white);

content.setLayout(new FlowLayout());

content.add(option);

content.add(Acess);

content.add(Chat);

content.add(OptionOk);

f.setVisible(true);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

OptionOk.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

try {

new GuiFrame().Initiate();

} catch (UnknownHostException ex) {

Logger.getLogger(GuiFrame.class.getName()).log(Level.SEVERE, null, ex);

}

}

});

}

public void Initiate() throws UnknownHostException {

f.removeAll();

ButtonGroup group = new ButtonGroup();

final JRadioButton ButtonServer = new JRadioButton("Server");

final JRadioButton ButtonClient = new JRadioButton("Client");

group.add(ButtonServer);

group.add(ButtonClient);

f.setSize(400, 100);

f.setLocationRelativeTo(null);

InetAddress thisIp = InetAddress.getLocalHost();

ImageIcon img = new ImageIcon("C:\Users\neal\Desktop\no.png");

f.setIconImage(img.getImage());

Label lip = new Label("Your IP is : " + thisIp.getHostAddress());

Label setup = new Label("Setup as ");

JButton ButtonOk = new JButton("OK");

final Container content = f.getContentPane();

content.setBackground(Color.white);

content.setLayout(new FlowLayout());

content.add(lip);

content.add(setup);

content.add(ButtonServer);

content.add(ButtonClient);

content.add(ButtonOk);

f.setVisible(true);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) throws UnknownHostException {

GuiFrame gf = new GuiFrame();

gf.Starter();

}

}

最佳答案

解决方案很简单:使用CardLayout,让这个布局管理器为您完成所有繁重的工作.有关如何执行此操作的更多详细信息,请参阅教程:How to use CardLayout

至于你的代码,请注意你实际上在启动时创建了2个JFrame,如果推送了JButton则还有两个:

GuiFrame类本身扩展了JFrame,但它似乎是一个你永远不会使用的JFrame,因此被浪费了,但它在程序启动时以及每当创建GuiFrame实例时创建,例如按下按钮时.然后在这个类的内部创建另一个JFrame f,一个在程序启动时再次按下按钮,我不认为这是你想要做的.

因此,更改代码以使类不扩展JFrame,并且不要在按钮的ActionListener中创建类的新实例.而是使用CardLayout交换视图.

例如:

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;

public class GuiFrame {

private static final String FIRST_PANEL = "First Panel";

private static final String SECOND_PANEL = "Second Panel";

final JFrame f = new JFrame("Test");

private CardLayout cardLayout = new CardLayout();

private JPanel content;

public void Starter() {

f.setSize(400, 100);

f.setLocationRelativeTo(null);

JButton OptionOk = new JButton("OK");

Label option = new Label("Choose a Option");

content = (JPanel) f.getContentPane();

content.setLayout(cardLayout);

JPanel firstPanel = new JPanel();

firstPanel.setBackground(Color.white);

firstPanel.setLayout(new FlowLayout());

firstPanel.add(option);

firstPanel.add(OptionOk);

content.add(firstPanel, FIRST_PANEL);

content.add(createSecondPanel(), SECOND_PANEL);

f.setVisible(true);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

OptionOk.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

cardLayout.show(content, SECOND_PANEL);

}

});

}

private JPanel createSecondPanel() {

JPanel secondPanel = new JPanel();

secondPanel.add(new JButton(new AbstractAction("Go Back") {

public void actionPerformed(ActionEvent e) {

cardLayout.show(content, FIRST_PANEL);

}

}));

return secondPanel;

}

public static void main(String[] args) {

GuiFrame gf = new GuiFrame();

gf.Starter();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值