0

I am trying to show different JPanels using JSplitPane.

I use SwingUtilities.InvokeLater to show all the components to avoid sluggishness in UI.

But the JPanel on the bottom which is pinkPane doesn't show until I resize the window.

I tried my chance using several threads to show the JPanel at the bottom:

-I have used 2-3 threads. One to initialize the class. One to revalidate the splitPane. The last one was the SwingUtilities.InvokeLater(new Runnable...) (Hoping one to solve the issue)

Here is my code:

    package changing;
    
    import java.awt.Color;
    import java.awt.Dimension;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JSplitPane;
    import javax.swing.SwingUtilities;
    import javax.swing.WindowConstants;
    
    public class splitPaneFrame {
        
        private static JFrame mainFrame = new JFrame();
        private static JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
        private static JSplitPane middle = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
        
        private int width = 1500;
        private int height = 860;
        
        public splitPaneFrame() {
            // TODO Auto-generated constructor stub
            mainFrame.setSize(width, height);
            mainFrame.setVisible(true);
            mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            initialization();
            mainFrame.add(splitPane);
        }
        
        private static void initialization() {
            JSplitPane mostRight = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
    
            JPanel cyanPane = new JPanel();
            cyanPane.setBackground(Color.CYAN);
    
            JPanel orangePane = new JPanel();
            orangePane.setBackground(Color.ORANGE);
            
            mostRight.setDividerSize(0);
            mostRight.setDividerLocation(400);
            mostRight.setLeftComponent(cyanPane);
            mostRight.setRightComponent(orangePane);
            mostRight.setOneTouchExpandable(false);
            
            JPanel yellowPane = new JPanel();
            yellowPane.setBackground(Color.YELLOW);
            
            yellowPane.setSize(new Dimension(600, 800));
            yellowPane.setMaximumSize(yellowPane.getSize());
            yellowPane.setPreferredSize(yellowPane.getSize());
            middle.setDividerSize(0);
            middle.setDividerLocation(600);
            middle.setLeftComponent(yellowPane);
            middle.setRightComponent(mostRight);
            middle.setOneTouchExpandable(false);
            
            JPanel magentaPane = new JPanel();
            magentaPane.setBackground(Color.MAGENTA);
            
            JSplitPane mostLeft = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
            
            mostLeft.setDividerLocation(250);
            mostLeft.setDividerSize(0);
            mostLeft.setLeftComponent(magentaPane);
            mostLeft.setRightComponent(middle);
            mostLeft.setOneTouchExpandable(false);
            
            // vertically medium panes end here
            ////////////////////////////////////////////////////////////////////////////////
            
            // Top and Bottom Horizontal Panes start here
            // splitPane on the most bottom
            JSplitPane bottom = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
            
            JPanel pinkPane = new JPanel();
            pinkPane.setBackground(Color.PINK);
            
            pinkPane.setSize(new Dimension(1500,30));
            pinkPane.setPreferredSize(new Dimension(1500,30));
            pinkPane.setMaximumSize(pinkPane.getPreferredSize());
            
            bottom.setDividerLocation(800);
            bottom.setDividerSize(0);
            bottom.setTopComponent(mostLeft);
            bottom.setBottomComponent(pinkPane);
            bottom.setOneTouchExpandable(false);
            bottom.setVisible(true);
            pinkPane.setVisible(true);
            
            JPanel redPane = new JPanel();
            redPane.setBackground(Color.RED);
            redPane.setSize(new Dimension(1500,30));
    
            // main splitPane
            splitPane.setDividerLocation(30);
            splitPane.setDividerSize(0);
            splitPane.setTopComponent(redPane);
            splitPane.setBottomComponent(bottom);
            splitPane.setOneTouchExpandable(false);
        }
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            SwingUtilities.invokeLater(new Runnable() {
                
                public void run() {
                    // TODO Auto-generated method stub
                    splitPaneFrame frame = new splitPaneFrame();
                }
            });
        }
    
    }
Mehmet
  • 118
  • 7
  • 1
    Your JPanels are too large for your JFrame, so the pink JPanel isn't visible unless you enlarge the height of the JFrame. I'm not sure what you're trying to do. Your [mre] confuses me. – Gilbert Le Blanc Mar 04 '21 at 08:21
  • Thanks for your help. You were right but I can't choose your comment as an accepted answer. Could you write this as an answer so that I can choose yours as the accepted one? – Mehmet Mar 04 '21 at 08:39

0 Answers0