简体   繁体   中英

Adding a JInternalFrame to a JTabbedPane holding a JScrollPane holding a JPanel with Gridbag layout

Can't figure out why this wont work, I get a blank panel added to my gridbag panel. I added a JLabel("test") between the frames I'm trying to add just to see that something IS getting added, it just isn't visible?

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Label;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;

public class Workspace extends JTabbedPane {
      static JFrame frame = new JFrame();
      private JPanel grid;
      private String text = new String("testing.");
    Workspace() {
        this.addTab("title", growPanel());
    }

    public static void main(String[] args) throws IOException {
          createAndShowGUI();
    }

  private JPanel growPanel() {
    JPanel gp = new JPanel(false);
    gp.setPreferredSize(new Dimension(800,600));

    //Add a button that adds my frame
    JButton addComponentBtn = new JButton("Add Component");
    addComponentBtn.addActionListener(e-> {
        try {
            addComponent();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    });
    gp.add(addComponentBtn, BorderLayout.PAGE_START);

    grid = new JPanel(new GridLayout(0, 2, 10, 10)); //any number of rows, 2 columns, H and V gap
    JScrollPane sp = new JScrollPane(grid);
    sp.setPreferredSize(new Dimension(800,600));
    gp.add(sp, BorderLayout.CENTER);
    this.setVisible(true);
    return gp;
  }  

  void addComponent() throws IOException {
    System.out.println("adding");
    grid.add(new JLabel("test"));
      grid.add(new intf());
      this.repaint();
      frame.pack();
  } 

  private static  void createAndShowGUI() throws IOException {
      //Create and set up the window.
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      //Add content to the window.
      frame.add(new Workspace(), BorderLayout.CENTER);

      //Display the window.
      frame.pack();
      frame.setVisible(true);
  }  
}

And the intf.java class for the JInternalFrame :

import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class intf extends JInternalFrame {
    public intf () {
        super("Document", 
                  true, //resizable
                  true, //closable
                  true, //maximizable
                  true);//iconifiable

        JPanel jp = new JPanel();
        JLabel jl = new JLabel("Hi I'm a label");
        jp.add(jl);
        this.add(jp);
        this.pack();
        this.repaint();
    }
}

Edit: The JPanel is used to hold the Layout, I don't think I can assign one to the TabbedPane? Users will load in images which will appear on the left side of the GridLayout (I will upgrade this to a GridBag). After selecting regions on said images, graphs will appear on the right side. This is also why we use a scrollPane so that there is no limit to the number of images loaded. The TabbedPane will be used to split the load if a user loads in too many images (this is all not in the demo code shown here and not relevant to the problem). The code I posted is for testing why the JInternalFrame doesn't show, so it only shows what is relevant to getting that to work.

Thank you all for your input. It turned out to be a simple mistake of not having a necessary .setVisible(true) Under the addComponent() method, the problem is solved when I replace

grid.add(new intf());

with

intf a = new intf(); a.setVisible(true); grid.add(a);

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