0

I created a JTabbedPane and a few JPanel objects. Since each panel pretty much looked the same the fields also are called the same. I thought it was OK since all the fields are local variables. Now I am in the controller class and I am having a issue with:

  1. The best way to add action listeners to all the fields in each JPanel and
  2. figure out which tabbed pane is selected.

Here is the GUI: package mainGUI;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;

public class MainMenuGUI {

JTabbedPane tabbedPane = new JTabbedPane();

JPanel findUserPanel;
JPanel deleteUserPanel;
JPanel addUserPanel;

JFrame frame = new JFrame();
JPanel tabbedPanel = new JPanel();

//Controller class for MainMenuGUI
ControllerMainMenuGUI listen = new ControllerMainMenuGUI(this);

public MainMenuGUI() {

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 400);
    findUserPanel = createFindUserPanel();
    deleteUserPanel = createDeleteUserPanel();
    addUserPanel = createAddUserPanel();

    tabbedPane.addTab("Find User", findUserPanel);
    tabbedPane.addTab("Delete User", deleteUserPanel);
    tabbedPane.addTab("Add User", addUserPanel);

    tabbedPanel.add(tabbedPane);
    frame.add(tabbedPanel);

    frame.pack();
    // opens frame in the center of the screen
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

JPanel createFindUserPanel() {
    findUserPanel = new JPanel();
    findUserPanel.setPreferredSize(new Dimension(300, 300));
    findUserPanel.setLayout(new GridLayout(5, 7));

    JLabel firstlbl = new JLabel("First Name");
    JLabel lastlbl = new JLabel("Last Name");
    JLabel addresslbl = new JLabel("Address");
    JLabel agelbl = new JLabel("Age");

    JTextField firstNametxt = new JTextField(15);
    JTextField lastNametxt = new JTextField(15);
    JTextField addresstxt = new JTextField(30);
    JTextField age = new JTextField(3);
    JButton btn = new JButton("Submit");
    JScrollPane window = new JScrollPane();
    window.setViewportBorder(new LineBorder(Color.RED));
    window.setPreferredSize(new Dimension(150, 150));

    findUserPanel.add(firstlbl);
    findUserPanel.add(firstNametxt);
    findUserPanel.add(lastlbl);
    findUserPanel.add(lastNametxt);
    findUserPanel.add(addresslbl);
    findUserPanel.add(addresstxt);
    findUserPanel.add(agelbl);
    findUserPanel.add(age);
    findUserPanel.add(window, BorderLayout.CENTER);
    findUserPanel.add(btn);

    return findUserPanel;
}

JPanel createDeleteUserPanel() {
    deleteUserPanel = new JPanel();
    deleteUserPanel.setPreferredSize(new Dimension(300, 300));
    deleteUserPanel.setLayout(new GridLayout(5, 7));

    JLabel firstlbl = new JLabel("First Name");
    JLabel lastlbl = new JLabel("Last Name");
    JLabel addresslbl = new JLabel("Address");
    JLabel agelbl = new JLabel("Age");

    JTextField firstNametxt = new JTextField(15);
    JTextField lastNametxt = new JTextField(15);
    JTextField addresstxt = new JTextField(30);
    JTextField age = new JTextField(3);
    JButton btn = new JButton("Submit");
    JScrollPane window = new JScrollPane();
    window.setViewportBorder(new LineBorder(Color.RED));
    window.setPreferredSize(new Dimension(150, 150));

    deleteUserPanel.add(firstlbl);
    deleteUserPanel.add(firstNametxt);
    deleteUserPanel.add(lastlbl);
    deleteUserPanel.add(lastNametxt);
    deleteUserPanel.add(addresslbl);
    deleteUserPanel.add(addresstxt);
    deleteUserPanel.add(agelbl);
    deleteUserPanel.add(age);
    deleteUserPanel.add(window, BorderLayout.CENTER);
    deleteUserPanel.add(btn);
    return deleteUserPanel;
}

JPanel createAddUserPanel() {
    addUserPanel = new JPanel();
    addUserPanel.setPreferredSize(new Dimension(300, 300));
    addUserPanel.setLayout(new GridLayout(5, 7));
    JLabel firstlbl = new JLabel("First Name");
    JLabel lastlbl = new JLabel("Last Name");
    JLabel addresslbl = new JLabel("Address");
    JLabel agelbl = new JLabel("Age");

    JTextField firstNametxt = new JTextField(15);
    JTextField lastNametxt = new JTextField(15);
    JTextField addresstxt = new JTextField(30);
    JTextField age = new JTextField(3);
    // nametxt.setPreferredSize(new Dimension(1,10));
    JButton btn = new JButton("Submit");
    JScrollPane window = new JScrollPane();
    window.setViewportBorder(new LineBorder(Color.RED));
    window.setPreferredSize(new Dimension(150, 150));

    addUserPanel.add(firstlbl);
    addUserPanel.add(firstNametxt);
    addUserPanel.add(lastlbl);
    addUserPanel.add(lastNametxt);
    addUserPanel.add(addresslbl);
    addUserPanel.add(addresstxt);
    addUserPanel.add(agelbl);
    addUserPanel.add(age);
    addUserPanel.add(window, BorderLayout.CENTER);
    addUserPanel.add(btn);
    return addUserPanel;
}
}

Controller class:

package mainGUI;

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

import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class ControllerMainMenuGUI {

MainMenuGUI mainMenuGUI;

int currentTabbedIndex = 0;

ControllerMainMenuGUI(MainMenuGUI mainMenuGUI){
    this.mainMenuGUI = mainMenuGUI;
}

//inner class will handle MainMenuGUI actions
class Actions implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {


    }

    private void addTabbedPaneListeners() {

        mainMenuGUI.tabbedPane.addChangeListener(new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent ce) {

                currentTabbedIndex =   
mainMenuGUI.tabbedPane.getSelectedIndex();
                System.out.println("Current tab is:" + currentTabbedIndex);

            }
        });
    }



}

}
Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
jocdrew21
  • 91
  • 3
  • 15
  • SO is a Question & Answer site, not an Issues and Help Desk. So ..what's your (one) question for this thread? BTW - it is likely those panels should not extend panel, and whatever attributes appear in them should not be 'part of' any panel class. I.E. the entire data model (for all panels) should be in the same place. – Andrew Thompson Feb 15 '15 at 09:36
  • `window.setPreferredSize(new Dimension(150, 150));` See [Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?](http://stackoverflow.com/q/7229226/418556) (Yes.) – Andrew Thompson Feb 15 '15 at 09:39
  • Change your through processes. One controller should control one view. Each panel should have it's own controller and that controller should be notified when the tab is changed, telling it that the current view is been "unloaded" and the new view is been "loaded" or some such... – MadProgrammer Feb 15 '15 at 09:50

0 Answers0