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();

}

}

来源:https://www.icode9.com/content-1-463801.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Awk使用方法简介

AWK AWK简介:awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入, 以空格为默认分隔符将每行切片…

矩形波如何傅立叶展开_金科文化会不会连续拉板?两位同学展开激辩

【编者按:金科文化是我们昨晚理论上留下的两道作业题之一,要求同学们根据课程内容,判断一下它是否符合连板青云的条件?后市如何预判?操作计划怎么制定?今天,很多同学就此展开了分析和讨论。今晚…

java web 不用框架_MyShop-不用框架的基础javaweb项目

javaweb基础开发Servletjspmysqlhtmlcssjs(找一个前端模板,一大堆html,自己写的没有模板的美观)数据库设计来一个最基础的用户表drop table ifexists myshop_user;create table myshop_user(USER_ID varchar(32) not null,USER_NAME varchar(20) not null,USER_PASS…

程序包管理器控制台 Add-Migration 用法

需要注意的是: 1.任何对数据库的操作都在代码和程序包管理控制台完成,千万不要自己去修改数据库,no! 2.ef中创建数据库的表必须要有主键~!否则 就不让你成功~ 现在来说如何映射 第一步创建在代码model中创建类 第二步 …

ipad如何连接电脑_电脑无法连接外网远程调试,一文教你如何用手机让台式机连接外网...

在弱电施工中,设备调试是一个很重要的环节,施工这么久就是为了实现弱电各系统的功能,调试是每一个弱电人系必需会的技能,也是检验你结合能力一种体现。在调试中会遇到各种你想不到的问题,当遇到问题时,你应…

java 多线程两种方式_JAVA多线程实现的两种方式

java多线程实现方式主要有两种:继承Thread类、实现Runnable接口1、继承Thread类实现多线程继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且&#x…

CAN总线学习资料

CAN总线呕心沥血教程 https://wenku.baidu.com/view/486647f47c1cfad6195fa794.html转载于:https://www.cnblogs.com/codecamel/p/7605480.html

安卓手机浏览器排行_安卓手机性能排行榜:国产手机集体“出位”,华为却在角落哭泣?...

华为手机的芯片一直都坚称是国产的骄傲,但是现在的华为芯片出现了一系列的问题,甚至有人预言在今年九月份之后,华为就不再会获得台积电的芯片供应了。这样,对华为来说无疑是不好的势头,而且芯片刚被市场认可&#xff0…

python os.access_os.access(path, mode)

os.access(path, mode)描述 (Description)方法access()使用真实的uid/gid来测试对路径的访问。 大多数操作都将使用有效的uid/gid,因此可以在suid/sgid环境中使用此例程来测试调用用户是否具有对path的指定访问权限。如果允许访问,则返回True&#xff0c…

HDnoip2017题解

那么,作为一名初入信息竞赛的选手,我也试着开始用博客记录自己的学习历程,那么这篇文章先简单介绍一下我自己吧。 本人开始学习信息学大概以来,主要都是用的C,所以对其他语言并不是十分熟悉。2016我还只是一名NOIP普及…

_Linux结束进程到底有多少种方法?

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习。1. 前言我们经常在Linux里使用kill命令来结束某后台进程。但kill命令实际上是向进程发送信号,并且有多种信号。终止运行一…

svg mysql_SVG 实例

SVG 实例简单的 SVG 实例一个简单的SVG图形例子:这里是SVG文件(SVG文件的保存与SVG扩展):/p>"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">stroke-width"2" fill"red" />SVG 代码解析:第一行…

Failed to import pydot

在使用keras进行模型绘制的时候,出现了一个错误 Failed to import pydot. You must install pydot and graphviz for pydotprint to work. 下面是解决方案,使用命令sudo apt-get install graphviz,将graphviz安装在系统环境下,不要…

mulitpartfile怎么接收不到值_光端机电源正常,但是运行不了怎么办?

光端机,是光信号传输的终端设备,在安防领域有很好的应用。伴随着监控的发展,视频光端机就是把1路到多路的模拟视频信号通过各种编码转换成光信号通过光纤介质来传输的设备分,分为模拟光端机和数字光端机。其中,光传输系…

java as操作_java 对类型的基本操作小结

1.json 字符串转换成对象SyncCarriageStatusDTO dto JSON.parseObject(value,SyncCarriageStatusDTO.class);List pparams JSON.parseObject(dto.getData(),new TypeReference>() {});2.对象转换成字符串对象String data JSON.toJSONString(pkg);2.枚举字符串转换成枚举类…

aes 加密_结合RSA与AES实现前后端加密通信

结合RSA与AES实现前后端加密通信一、思路使用RSA秘钥生成工具生成一对公钥(A)和私钥(B),前端保留A,后端保留B。前端发送数据时,先生成一串随机16位字符串作为AES的秘钥(C),然后使用A使用RSA算法对C进行加密,得到加密后…

cxf java调用.net_CXF在项目中的真实运用--WS访问客户端编写[java、.net]

一、首先,CXF的WS实现类由于实现了和Spring的无缝集成,因此可以采用Spring的单元测试来测试基本功能。代码如下:[java]package com.defshare.sy.test.biz;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import…

中值滤波去除图像噪声的matlab程序

中值滤波:基于排序理论的一种能有效抑制噪声的非线性信号处理技术。 方法:取含有基数(偶数会有半像素的差)个模板数据的滑动模板,对模板中的数据从小到大排序,取排在中间位置上的数据作为最终的处理结果。 …

android 音乐app 进度条_让这些可爱的APP成为你的生活好帮手

对于可爱美观的东西,绝大多数人都会喜欢,尤其是女孩子。今天给大家推荐一波可爱又实用的APP,让它们成为你的生活好助手。以下应用在手机应用商店搜索即可下载。01 喵喵记账 支持 iOS 和 Android,免费谈到记账,很多…

java中scanner与hashmap_Java中HashMap的使用练习

问题:给定任意一个字符串“today is a special day”,长度为任意,要求找出其出现次数最多的字符及计算次数。(可以用HashMap,HashSet,Collections实现)解决:利用HashMap和HashSet解决。代码:imp…