简体   繁体   中英

Adding JPanel from another class in JFrame When Button Clicked

Hi i'm new to Java and kinda lost in the codes i tried to write. It compiles with no error but everything i added on panel don't show up on the frame

Here's my code:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;


public class Mainframe extends JFrame {

private AddingWindow addingWindow = new AddingWindow(); //Passing AddingWindow Class to the Main Class as statement 
private JFrame addingWindowFrame = new JFrame(); //This is the frame i wanted to add the JPanel with its labels and buttons  

public Mainframe() { 

JPanel controlPanel = new JPanel();
controlPanel.setLayout(new GridLayout(1 ,1));
JButton addingBtn = new JButton("Add");

controlPanel.add(addingBtn);

//Add controlPanel to the mainframe
setLayout(new BorderLayout());
add(controlPanel, BorderLayout.WEST);

//Set showAddingPanel button event
addingBtn.addActionListener (new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
      addingWindowFrame.setVisible(true);
  }
}); 

addingWindowFrame.pack();
addingWindowFrame.setTitle("Title);
addingWindowFrame.setSize(600, 400);
addingWindowFrame.setResizable(false);
addingWindowFrame.setLocationRelativeTo(null);  
addingWindowFrame.getContentPane().add(addingWindow); //Here i'm adding JPanel Class to the Frame

}   
//Main method
public static void main(String[] args) {
JFrame mainFrame = new Mainframe();  
mainFrame.setTitle("\"Mainframe\"");
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setVisible(true);             
mainFrame.setExtendedState(Frame.MAXIMIZED_BOTH);
mainFrame.setMinimumSize(new Dimension(800, 600));

  }       
} 

This is the other panel Class file i wanted to show up on the AddingWindowFrame

import java.awt.*;
import javax.swing.*;


public class AddingWindow extends JPanel {

AddingWindow() {

JPanel addingPanel = new JPanel(); 
addingPanel.setLayout(new GridLayout(2, 2));

JLabel fullNameLbl = new JLabel("Name");
JTextField fullNameTextField = new JTextField(25);
JButton addBtn  = new JButton("add");
JButton cancelBtn  = new JButton("cancel");

//Adding buttons, label and textfield to addingPanel
addingPanel.add(fullNameLbl);
addingPanel.add(fullNameTextField);
addingPanel.add(addBtn);
addingPanel.add(cancelBtn);                   

    }
  }

You have two frames

  • MainFrame
  • AddingWindowFrame -> contains AddingPanel

And when you click on the button you are just displaying the AddingWindowFrame(I guess it should displayed somewhere in the background). Instead you need to add the AddingPanel directly to the currentFrame.

Mainframe.this.getContentPane().add(addingWindow);

But you should check how to use LayoutManagers

I think you want to display 在此处输入图片说明

What you did is you added all the things to your addingPanel but you forgot to add the addingPanel itself.

import java.awt.*;
import javax.swing.*;


public class AddingWindow extends JPanel {

AddingWindow() {

JPanel addingPanel = new JPanel(); 
addingPanel.setLayout(new GridLayout(2, 2));

JLabel fullNameLbl = new JLabel("Name");
JTextField fullNameTextField = new JTextField(25);
JButton addBtn  = new JButton("add");
JButton cancelBtn  = new JButton("cancel");

//Adding buttons, label and textfield to addingPanel
addingPanel.add(fullNameLbl);
addingPanel.add(fullNameTextField);
addingPanel.add(addBtn);
addingPanel.add(cancelBtn);                   
add(addingPanel);
    }
  }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM