initcomponents componentes agregar java swing jframe layout-manager cardlayout

java - initcomponents - Borrar componentes de JFrame y agregar nuevos componentes



agregar jpanel en un jframe en java y netbeans (2)

Tengo un JFrame , que tiene algunas opciones. Cuando se presiona el botón OK, quiero el mismo JFrame para borrar los contenidos y agregar nuevos contenidos. Lo he intentado, pero el problema es nuevo. JFrame aparece. ¿Qué estoy haciendo mal?

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


La solución es simple: use un CardLayout y permita que este administrador de diseño haga todo el trabajo pesado por usted. Para obtener más detalles sobre cómo hacer esto, consulte el tutorial: Cómo usar CardLayout

En cuanto a su código, tenga en cuenta que en realidad está creando 2 JFrames cuando se inicia y dos más si se empuja el JButton:

La clase GuiFrame en sí amplía JFrame, pero parece ser un JFrame que nunca se usa y, por lo tanto, se desperdicia, pero se crea al iniciar el programa y cada vez que se crea una instancia de GuiFrame, como cuando se presiona el botón. Luego, dentro de esta clase, usted crea otro JFrame f, uno en el inicio del programa y otra vez al presionar un botón, y no creo que esto sea lo que quiere hacer.

Así que cambie su código para que la clase no extienda JFrame, y no cree una nueva instancia de la clase en el ActionListener de sus botones. En su lugar, use CardLayout para intercambiar puntos de vista.

Por ejemplo:

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


versión fija (pero aún sucia):

import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.*; public class GuiFrame implements ActionListener{ final JFrame f = new JFrame("Test"); public void start(){ 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(this); } 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.removeAll(); content.setBackground(Color.white); content.setLayout(new FlowLayout()); content.add(lip); content.add(setup); content.add(ButtonServer); content.add(ButtonClient); content.add(ButtonOk); f.repaint(); } public void actionPerformed(ActionEvent arg0) { try { initiate(); } catch (UnknownHostException ex) { Logger.getLogger(GuiFrame.class.getName()).log(Level.SEVERE, null, ex); } } public static void main(String[] args) throws UnknownHostException { GuiFrame gf = new GuiFrame(); gf.start(); } }