1

Rebuilt the SCCE for you guys.

My goal is this target layout1 target layout2

The general idea is that clicking on the title bars of the menus (right side) will collapsible (set visible to false) the content panes associated with them:
gender_panel_BG collapses gender_panel_body
race_panel_BG collapses race_panel_body
class_panel_BG collapses class_panel_body
base_stats_panel_BG collapses base_stats_panel_body
merits_panel_BG collapses merits_panel_body

You get the idea

Another thing that is bugging me is the huge space at the top of the body and it's content.


Gradient bar img source title gradient source

background source source bg source

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.*;

public class JaGCharCreation  {

    //set inital size of window
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    int initalWidth = (int) screenSize.width - 50;
    int initalHeight = (int) screenSize.height - 50;
    JPanel gender_panel_body;
    GridBagConstraints gbc;
    JLabel viewdata_gender = new JLabel("gender");
    ImageIcon BGicon = new ImageIcon("parchmentTall.jpg");
    Image img1 = BGicon.getImage();

    public static void main(String[] args) {
        new JaGCharCreation ();
    }

    //set up thread safe invoking for GUI
    public JaGCharCreation () {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                //frame.setLocationRelativeTo(null);
                frame.setVisible(true);
                // Give the frame an initial size.
                frame.setSize(initalWidth, initalHeight);
            }
        });
    }

    //main panel to hold all others
    public class TestPane extends JPanel {
        public TestPane() {
            setLayout(new GridLayout(0, 2));
            add(createLeftPane());
            add(createRightPane());
        }//end of class for master frame

/////////////////////////////////Left Panel Nest Begin//////////////////////////////////////////////////////////////
        protected JPanel createLeftPane() {
        img1 = img1.getScaledInstance(initalWidth/2, initalHeight, java.awt.Image.SCALE_SMOOTH);
        final ImageIcon BGiconSM = new ImageIcon(img1);

            JPanel panel = new JPanel(new BorderLayout())                           {
                            protected void paintComponent(Graphics g)
                                {
                                //  Dispaly image at full size
                                g.drawImage(BGiconSM.getImage(), 0, 0, null);
                                super.paintComponent(g);
                                }
                            };
            panel.setOpaque( false );
            panel.setBorder(new EmptyBorder(35, 80, 35, 80));
            //panel.setBackground(Color.RED);
            return  panel;
        }//end left pane
/////////////////////////////////Left Panel Nest End//////////////////////////////////////////////////////////////
/////////////////////////////////Right Panel Nest Begin//////////////////////////////////////////////////////////////
        protected JPanel createRightPane() {
            img1 = img1.getScaledInstance(initalWidth/2, initalHeight, java.awt.Image.SCALE_SMOOTH);
            final ImageIcon BGiconSM = new ImageIcon(img1);
            JPanel content = new JPanel(new GridBagLayout());
            content.setOpaque(false);

            JPanel panel = new JPanel(new BorderLayout())                           {
                            protected void paintComponent(Graphics g)
                                {
                                //  Dispaly image at full size
                                g.drawImage(BGiconSM.getImage(), 0, 0, null);
                                super.paintComponent(g);
                                }
                            };
            panel.setOpaque( false );
            panel.setBorder(new EmptyBorder(35, 80, 35, 80));
            //panel.setBackground(Color.BLUE);

            //set up our image for the title bars
            ImageIcon icon = new ImageIcon("GradientDetail.png");
            Image img = icon.getImage();
            img = img.getScaledInstance(initalWidth/2, 40, java.awt.Image.SCALE_SMOOTH);
            final ImageIcon iconSM = new ImageIcon(img);

/////////////////////////////////Gender Panel Nest Begins//////////////////////////////////////////////////////////////
            JPanel gender_panel_BG = new JPanel(new BorderLayout())
                {
                protected void paintComponent(Graphics g)
                    {
                    //  Dispaly image at full size
                    g.drawImage(iconSM.getImage(), 0, 0, null);
                    super.paintComponent(g);
                    }
                };
            gender_panel_BG.setOpaque( false );

            JLabel gender_panel_label = new JLabel("Gender");
            gender_panel_label.setFont(new Font("Impact", Font.BOLD, 30));
            gender_panel_label.setForeground(Color.white);
            gender_panel_label.setOpaque(false);

            gender_panel_body = new JPanel(new GridLayout(1, 3));
            gender_panel_body.setBackground(Color.WHITE);

            gender_panel_BG.add(gender_panel_label, BorderLayout.NORTH);

            JPanel gender_panel = new JPanel(new GridLayout(2, 1));
            //gender_panel.setBorder(new EmptyBorder(0, 10, 0, 10));
            //gender_panel.setBackground(Color.GREEN);
            gender_panel.setOpaque(false);
            gender_panel.add(gender_panel_BG);
            gender_panel.add(gender_panel_body);

            MouseAdapter gender = new MouseAdapterMod(){
           public void mousePressed(MouseEvent e) {
                   //System.out.println(e.getSource());
                   System.out.println("A mouse was pressed");
                gender_panel_body.setVisible(!gender_panel_body.isVisible());
           }//end of mousePressed(MouseEvent e)
        };

        // Create radio buttons and add them to content pane.
        JRadioButton g1 = new JRadioButton("Male");
        g1.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                    viewdata_gender.setText("Gender: Male");
                 }//action perfomed;
            });//g1 add action listener
        gender_panel_body.add(g1);

        JRadioButton g2 = new JRadioButton("Female");
        g2.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                    viewdata_gender.setText("Gender: Female");
                 }//action perfomed;
            });//g2 add action listener
        gender_panel_body.add(g2);

        JRadioButton g3 = new JRadioButton("<Unknown>");
        g3.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                    viewdata_gender.setText("Gender: <Unknown>");
                 }//action perfomed;
            });//g3 add action listener
        gender_panel_body.add(g3);

        // Define a button group.
        ButtonGroup genderButtons = new ButtonGroup();
        genderButtons.add(g1);
        genderButtons.add(g2);
        genderButtons.add(g3);

            gender_panel_BG.addMouseListener(gender);
            content.add(gender_panel, gbc);
/////////////////////////////////Gender Panel Nest End//////////////////////////////////////////////////////////////
/////////////////////////////////Race Panel Nest Begins//////////////////////////////////////////////////////////////
            JPanel race_panel_BG = new JPanel(new BorderLayout())
                {
                protected void paintComponent(Graphics g)
                    {
                    //  Dispaly image at full size
                    g.drawImage(iconSM.getImage(), 0, 0, null);
                    super.paintComponent(g);
                    }
                };
            race_panel_BG.setOpaque( false );

            JLabel race_panel_label = new JLabel("Race");
            race_panel_label.setFont(new Font("Impact", Font.BOLD, 30));
            race_panel_label.setForeground(Color.white);
            race_panel_label.setOpaque(false);

            JPanel race_panel_body = new JPanel(new GridLayout(5, 8));
            race_panel_body.setBackground(Color.WHITE);

            race_panel_BG.add(race_panel_label, BorderLayout.NORTH);

            JPanel race_panel = new JPanel(new GridLayout(2, 1));
            //race_panel.setBorder(new EmptyBorder(0, 10, 0, 10));
            //race_panel.setBackground(Color.GREEN);
            race_panel.setOpaque(false);
            race_panel.add(race_panel_BG);
            race_panel.add(race_panel_body);

            for (int i=0; i <= 60; i++){
                ImageIcon RCicon = new ImageIcon("headshot.jpg");
                Image RCimg = RCicon.getImage();
                RCimg = RCimg.getScaledInstance(40, 40, java.awt.Image.SCALE_SMOOTH);
                final ImageIcon RCiconSM = new ImageIcon(RCimg);
                JButton button = new JButton(RCiconSM);
                button.setBorder(BorderFactory.createEmptyBorder());
                button.setContentAreaFilled(false);
                race_panel_body.add(button);
            };//for loop

            MouseAdapter race = new MouseAdapterMod();
            race_panel_body.addMouseListener(race);
            content.add(race_panel, gbc);
/////////////////////////////////Race Panel Nest End//////////////////////////////////////////////////////////////
/////////////////////////////////Class Panel Nest Begins//////////////////////////////////////////////////////////////
            JPanel class_panel_BG = new JPanel(new BorderLayout())
                {
                protected void paintComponent(Graphics g)
                    {
                    //  Dispaly image at full size
                    g.drawImage(iconSM.getImage(), 0, 0, null);
                    super.paintComponent(g);
                    }
                };
            class_panel_BG.setOpaque( false );

            JLabel class_panel_label = new JLabel("Class");
            class_panel_label.setFont(new Font("Impact", Font.BOLD, 30));
            class_panel_label.setForeground(Color.white);
            class_panel_label.setOpaque(false);

            JPanel class_panel_body = new JPanel(new GridLayout(5, 8));
            class_panel_body.setBackground(Color.WHITE);

            class_panel_BG.add(class_panel_label, BorderLayout.NORTH);

            JPanel class_panel = new JPanel(new GridLayout(2, 1));
            //class_panel.setBorder(new EmptyBorder(0, 10, 0, 10));
            //class_panel.setBackground(Color.GREEN);
            class_panel.setOpaque(false);
            class_panel.add(class_panel_BG);
            class_panel.add(class_panel_body);

            for (int g=0; g <= 50; g++){
                ImageIcon CCicon = new ImageIcon("headshot.jpg");
                Image CCimg = CCicon.getImage();
                CCimg = CCimg.getScaledInstance(40, 40, java.awt.Image.SCALE_SMOOTH);
                final ImageIcon CCiconSM = new ImageIcon(CCimg);
                JButton cbutton = new JButton(CCiconSM);
                cbutton.setBorder(BorderFactory.createEmptyBorder());
                cbutton.setContentAreaFilled(false);
                class_panel_body.add(cbutton);
            };//for loop

            MouseAdapter cclass = new MouseAdapterMod();
            class_panel_body.addMouseListener(cclass);
            content.add(class_panel, gbc);
/////////////////////////////////Class Panel Nest End//////////////////////////////////////////////////////////////
/////////////////////////////////Base Stats Panel Nest Begins//////////////////////////////////////////////////////////////
            JPanel base_stats_panel_BG = new JPanel(new BorderLayout())
                {
                protected void paintComponent(Graphics g)
                    {
                    //  Dispaly image at full size
                    g.drawImage(iconSM.getImage(), 0, 0, null);
                    super.paintComponent(g);
                    }
                };
            base_stats_panel_BG.setOpaque( false );

            JLabel base_stats_panel_label = new JLabel("Base Attributes");
            base_stats_panel_label.setFont(new Font("Impact", Font.BOLD, 30));
            base_stats_panel_label.setForeground(Color.white);
            base_stats_panel_label.setOpaque(false);

            JPanel base_stats_panel_body = new JPanel(new GridLayout(1, 2));
            base_stats_panel_body.setBackground(Color.WHITE);

            base_stats_panel_BG.add(base_stats_panel_label, BorderLayout.NORTH);

            JPanel base_stats_panel = new JPanel(new GridLayout(2, 1));
            //base_stats_panel.setBorder(new EmptyBorder(0, 10, 0, 10));
            //base_stats_panel.setBackground(Color.GREEN);
            base_stats_panel.setOpaque(false);
            base_stats_panel.add(base_stats_panel_BG);
            base_stats_panel.add(base_stats_panel_body);

            MouseAdapter base_stats = new MouseAdapterMod();
            base_stats_panel_body.addMouseListener(base_stats);
            content.add(base_stats_panel, gbc);
/////////////////////////////////Base Stats Panel Nest End//////////////////////////////////////////////////////////////
/////////////////////////////////Merits Panel Nest Begins//////////////////////////////////////////////////////////////
            JPanel merits_panel_BG = new JPanel(new BorderLayout())
                {
                protected void paintComponent(Graphics g)
                    {
                    //  Dispaly image at full size
                    g.drawImage(iconSM.getImage(), 0, 0, null);
                    super.paintComponent(g);
                    }
                };
            merits_panel_BG.setOpaque( false );

            JLabel merits_panel_label = new JLabel("Advantages and Disadvantages");
            merits_panel_label.setFont(new Font("Impact", Font.BOLD, 30));
            merits_panel_label.setForeground(Color.white);
            merits_panel_label.setOpaque(false);

            JPanel merits_panel_body = new JPanel(new BorderLayout());
            merits_panel_body.setBackground(Color.WHITE);

            merits_panel_BG.add(merits_panel_label, BorderLayout.NORTH);

            JPanel merits_panel = new JPanel(new GridLayout(2, 1));
            //merits_panel.setBorder(new EmptyBorder(0, 10, 0, 10));
            //merits_panel.setBackground(Color.GREEN);
            merits_panel.setOpaque(false);
            merits_panel.add(merits_panel_BG);
            merits_panel.add(merits_panel_body);

            MouseAdapter merits = new MouseAdapterMod();
            merits_panel_body.addMouseListener(merits);
            content.add(merits_panel, gbc);
/////////////////////////////////Merits Panel Nest End//////////////////////////////////////////////////////////////
/////////////////////////////////Group Panel Nest Begin//////////////////////////////////////////////////////////////
            JPanel viewData = new JPanel(new GridLayout(5, 1));
            viewData.add(gender_panel);
            viewData.add(race_panel);
            viewData.add(class_panel);
            viewData.add(base_stats_panel);
            viewData.add(merits_panel);

            panel.add(new JScrollPane(viewData));
            return panel;
/////////////////////////////////Group Panel Nest End//////////////////////////////////////////////////////////////
        }//end right pane
/////////////////////////////////Right Panel Nest End//////////////////////////////////////////////////////////////

        public class MouseAdapterMod extends MouseAdapter {
           // usually better off with mousePressed rather than clicked
           public void mousePressed(MouseEvent e) {
                   //System.out.println(e.getSource());
                   System.out.println("A mouse was pressed");
               if (e.getSource() == "gender_panel_BG"){
                gender_panel_body.setVisible(!gender_panel_body.isVisible());
               }//end of  if (e.getSource() == "gender")
           }//end of mousePressed(MouseEvent e)
        }//end of MouseAdapterMod extends MouseAdapter
    }//end master panel set
}//end master class
Community
  • 1
  • 1
NekoLLX
  • 219
  • 6
  • 19
  • Please update your [sscce](http://sscce.org/) to focus on the problem sub-panel; you can access posted images via `URL`, as shown [here](http://stackoverflow.com/a/10862262/230513), or use synthetic images as shown [here](http://stackoverflow.com/a/15982915/230513). – trashgod May 22 '13 at 09:01
  • done, trimmed out the left side entierly – NekoLLX May 23 '13 at 23:15
  • This is still over 360 lines with scores of `JPanel` instances; in addition to `URL`, you can use `UIManager.getIcon("html.pendingImage")` for filler icons; try `Box` on the right. – trashgod May 24 '13 at 01:23
  • Actually I seem to be figuring it out on my own even with this limited advice. Now i just need to figure out how to select multiple jbuttons. It's not quite a check box as i don't want wnt to have tick boxes but instead images so i'm uses buttons – NekoLLX May 24 '13 at 05:46

1 Answers1

1

Now I need to figure out how to select multiple JButtons. It's not quite a check box, as I want to have images instead of tick boxes.

JToggleButton, the parent of JCheckBox, works well for this, as each button knows its selected state. You can nest GridLayout instances in a vertical Box, as shown below.

image

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JToggleButton;
import javax.swing.UIManager;
import javax.swing.border.TitledBorder;

/** @see http://stackoverflow.com/a/16733710/230513 */
public class Test {

    private static final int N = 4;

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Box b = new Box(BoxLayout.Y_AXIS);
        b.add(createPanel());
        b.add(createPanel());
        f.add(new JScrollPane(b){

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(400, 500);
            }
        });
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    private JPanel createPanel() {
        JPanel p = new JPanel(new GridLayout(N, N));
        p.setBorder(new TitledBorder(String.valueOf(p.hashCode())));
        for (int i = 0; i < N * N; i++) {
            p.add(createButton());
        }
        return p;
    }

    private JToggleButton createButton() {
        JToggleButton b = new JToggleButton(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println(e.getActionCommand());
            }
        });
        b.setIcon(UIManager.getIcon("html.pendingImage"));
        b.setText(String.valueOf(b.hashCode()));
        b.setHorizontalTextPosition(JToggleButton.CENTER);
        b.setVerticalTextPosition(JToggleButton.BOTTOM);
        return b;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Test().display();
            }
        });
    }
}
trashgod
  • 203,806
  • 29
  • 246
  • 1,045
  • is there any advantage to Jtobble button over jcheckbox (i rebuit my system with j checkboxes last night" and it seems to work fine, just need to find a way to see which ones are selected and output all those choices to a single string (or array i can parse out to a long string) – NekoLLX May 24 '13 at 18:47
  • thanks, think i'll stick with my check boxes i've gotten them to hilight and de hilight, and to pass a list to my left side pane with a text list of them all. All i have left to do is find a way to give them a value. The idea being if you select 3 races their value would reflect say the first race being "half breed" and the other two being "quarters" the idea being that for every race you add the bloo become less diluted but the end result when you add them all up is 1 – NekoLLX May 25 '13 at 00:22