mihmandar
mihmandar

Reputation: 15

How can I add for JPanel show/hide action to the JButton in implemented ActionListener?

I am trying to understand implemented ActionListener. I couldn't find a way out to add it to JButtons in an othor method. I simply trying to add show and hide action to buttons but I could't. Any help? My code is here. There are 3 colored JPanel and every button should hide or show related color JPanel.

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.Border;

public class ShowHidePanels implements ActionListener {
    
    public static void main(String[] args) {
        
        new ShowHidePanels();
        
    }
    
    public ShowHidePanels() {
        
        JFrame frame = new JFrame();
        frame.setLayout(new GridLayout(1, 2));
        
        frame.add(bluePanel());
        frame.add(greenPanel());
        frame.add(redPanel());
        frame.add(buttonPanel());
        
        frame.setSize(950, 600);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        
    }
    
    public static JPanel greenPanel() {
        
        String greenTitle = "Green Panel";
        Border greenBorder = BorderFactory.createTitledBorder(greenTitle);
        
        JPanel greenPanel = new JPanel();
        greenPanel.setBorder(greenBorder);
        greenPanel.setBackground(new Color(165, 195, 70));
        
        return greenPanel;
    }
    
    public static JPanel bluePanel() {
        
        String blueTitle = "Blue Panel";
        Border blueBorder = BorderFactory.createTitledBorder(blueTitle);
        
        JPanel bluePanel = new JPanel();
        bluePanel.setBorder(blueBorder);
        bluePanel.setBackground(new Color(80, 105, 212));
        
        return bluePanel;
    }
    
    public static JPanel redPanel() {
        
        String redTitle = "Kirmizi Panel";
        Border redBorder = BorderFactory.createTitledBorder(redTitle);
        
        JPanel redPanel = new JPanel();
        redPanel.setBorder(redBorder);
        redPanel.setBackground(new Color(255, 100, 90));
        
        return redPanel;
    }
    
    public static JPanel buttonPanel() {
        
        Border greyBorder = BorderFactory.createTitledBorder("Grey Panel");
        
        JButton b_BlueHide = new JButton("Hide Blue");
        JButton b_BlueShow = new JButton("Show Blue");
        
        JButton b_RedHide = new JButton("Hide Red");
        JButton b_RedShow = new JButton("Show Red");
        
        JButton b_GreenHide = new JButton("Hide Green");
        JButton b_GreenShow = new JButton("Show Green");
            
        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(0, 1));
        buttonPanel.setBorder(greyBorder);
        buttonPanel.setBackground(new Color(200, 200, 200));
        
        buttonPanel.add(b_BlueHide);
        buttonPanel.add(b_BlueShow);
        buttonPanel.add(b_GreenHide);
        buttonPanel.add(b_GreenShow);
        buttonPanel.add(b_RedHide);
        buttonPanel.add(b_RedShow);
        
        return buttonPanel;
    }

    @Override
    public void actionPerformed(ActionEvent event) {
        
        
    }
    
    
}

Upvotes: 0

Views: 69

Answers (1)

MadProgrammer
MadProgrammer

Reputation: 347334

static is not your friend. It has its place and purpose, but this is not one of them. Learn to live without it.

Instead, your methods and components should be instance based (that is, obviously, not static and reliant on a instance of the parent class).

The following example is slightly modified and makes use of a CardLayout to switch the panels, which is a lot more fun then trying to handle z-order issues ;)

Take a look at How to Use CardLayout

Simple

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.Border;

public class Test {

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

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel implements ActionListener {

        private CardLayout cardLayout;
        private JPanel contentPane;

        public TestPane() {
            cardLayout = new CardLayout();
            setLayout(new BorderLayout());
            contentPane = new JPanel(cardLayout);
            contentPane.add(bluePanel(), "blue");
            contentPane.add(greenPanel(), "green");
            contentPane.add(redPanel(), "red");

            add(contentPane);

            add(buttonPanel(), BorderLayout.SOUTH);
        }

        public JPanel greenPanel() {

            String greenTitle = "Green Panel";
            Border greenBorder = BorderFactory.createTitledBorder(greenTitle);

            JPanel greenPanel = new JPanel();
            // Demonstration purposes only -----//
            greenPanel.setPreferredSize(new Dimension(200, 200));
            // ----- Demonstration purposes only //
            greenPanel.setBorder(greenBorder);
            greenPanel.setBackground(new Color(165, 195, 70));

            return greenPanel;
        }

        public JPanel bluePanel() {

            String blueTitle = "Blue Panel";
            Border blueBorder = BorderFactory.createTitledBorder(blueTitle);

            JPanel bluePanel = new JPanel();
            // Demonstration purposes only -----//
            bluePanel.setPreferredSize(new Dimension(200, 200));
            // ----- Demonstration purposes only //
            bluePanel.setBorder(blueBorder);
            bluePanel.setBackground(new Color(80, 105, 212));

            return bluePanel;
        }

        public JPanel redPanel() {

            String redTitle = "Kirmizi Panel";
            Border redBorder = BorderFactory.createTitledBorder(redTitle);

            JPanel redPanel = new JPanel();
            // Demonstration purposes only -----//
            redPanel.setPreferredSize(new Dimension(200, 200));
            // ----- Demonstration purposes only //
            redPanel.setBorder(redBorder);
            redPanel.setBackground(new Color(255, 100, 90));

            return redPanel;
        }

        public JPanel buttonPanel() {

            Border greyBorder = BorderFactory.createTitledBorder("Grey Panel");

            JButton blue = new JButton("Blue");
            JButton red = new JButton("Red");
            JButton green = new JButton("Green");

            JPanel buttonPanel = new JPanel();
            buttonPanel.setLayout(new GridLayout(0, 1));
            buttonPanel.setBorder(greyBorder);
            buttonPanel.setBackground(new Color(200, 200, 200));

            buttonPanel.add(blue);
            buttonPanel.add(green);
            buttonPanel.add(red);

            blue.addActionListener(this);
            green.addActionListener(this);
            red.addActionListener(this);

            return buttonPanel;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            String cmd = e.getActionCommand();
            if ("blue".equalsIgnoreCase(cmd)) {
                cardLayout.show(contentPane, "blue");
            } else if ("red".equalsIgnoreCase(cmd)) {
                cardLayout.show(contentPane, "red");
            } else if ("green".equalsIgnoreCase(cmd)) {
                cardLayout.show(contentPane, "green");
            }
        }
    }
}

There's a lot of room for simplification and reduction of duplicate workflows, but I'll leave that for you to figure out ;)

Upvotes: 2

Related Questions