100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java – 清除JFrame的组件并添加新组件

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

时间:2022-06-15 15:26:38

相关推荐

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

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

import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.IOException;import .InetAddress;import .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(); }}来源:/content-1-463801.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。