2

I have two different programs MenuWindow.java and SettingsWindow.java both GUIs, made using Swing. Is it possible to open SettingsWindow.java by clicking a button in MenuWindow.java?

Here are two codes:

MenuWindow.java

import java.awt.*;
import javax.swing.*;




public class MenuWindow
{
JFrame f ;
JMenuBar m ;
JMenu File , Settings , Timer , Programs , Store , Run , Help ;
JMenuItem m1 , m2 , m3 , m4 , m5 , m6 , m7 , m8 , m9 , m10 , m11 , m12 ;
JButton jb1, jb2, jb3 , jb4 , jb5 , jb6;


public MenuWindow() 
{

    f = new JFrame("Reflow") ;
    f.setSize(600, 600) ;
    m = new JMenuBar() ;
    File = new JMenu("File") ;
    Settings = new JMenu("Settings") ;
    Timer = new JMenu("Timer") ;
    Programs = new JMenu("Programs") ;
    Store = new JMenu("Store");
    Run = new JMenu("Run");
    Help = new JMenu("Help");
    m1 = new JMenuItem("Exit") ;
    m2 = new JMenuItem("Temperature") ;
    m3 = new JMenuItem("Clock") ;
    m4 = new JMenuItem("Profile") ;
    m5 = new JMenuItem(" Weekly Timer") ;
    m6 = new JMenuItem("Preset Programs") ;
    m7 = new JMenuItem("Errors") ;
    m8 = new JMenuItem("Profile") ;
    m9 = new JMenuItem("Auto Run") ;
    m10 = new JMenuItem("Profile Run") ;
    m11 = new JMenuItem("Manual Run") ;
    m12 = new JMenuItem("About");


    ImageIcon SettingsIc = new ImageIcon("settings.png");
    jb1 = new JButton(SettingsIc);
    jb1.setFocusPainted( false );
    //jb1.setBorderPainted(false); 
    jb1.setContentAreaFilled(false); 

    ImageIcon TimerIc = new ImageIcon("clock.png");
    jb2 = new JButton(TimerIc);
    jb2.setFocusPainted( false );
    //jb2.setBorderPainted(false); 
    jb2.setContentAreaFilled(false); 

    ImageIcon ProgramsIc = new ImageIcon("programs.png");
    jb3 = new JButton(ProgramsIc);
    jb3.setFocusPainted( false );
    //jb3.setBorderPainted(false); 
    jb3.setContentAreaFilled(false); 

    ImageIcon StoreIc = new ImageIcon("store.png");
    jb4 = new JButton(StoreIc);
    jb4.setFocusPainted( false );
    //jb4.setBorderPainted(false); 
    jb4.setContentAreaFilled(false); 

    ImageIcon RunIc = new ImageIcon("run.png");
    jb5 = new JButton(RunIc);
    jb5.setFocusPainted( false );
    //jb5.setBorderPainted(false); 
    jb5.setContentAreaFilled(false); 

    ImageIcon ConnectIc = new ImageIcon("connect.png");
    jb6 = new JButton(ConnectIc);
    jb6.setFocusPainted( false );
    //jb6.setBorderPainted(false); 
    jb6.setContentAreaFilled(false); 

    File.add(m1) ;
    Settings.add(m2) ;
    Settings.add(m3) ;
    Settings.add(m4) ;
    Timer.add(m5) ;
    Programs.add(m6) ;
    Store.add(m7);
    Store.add(m8);
    Run.add(m9);
    Run.add(m10);
    Run.add(m11);
    Help.add(m12);
    m.add(File) ;
    m.add(Settings) ;
    m.add(Timer) ;
    m.add(Programs) ;
    m.add(Store) ;
    m.add(Run) ;
    m.add(Help) ;
    f.add(m) ;
    f.add(jb1);
    f.add(jb2);
    f.add(jb3);
    f.add(jb4);
    f.add(jb5);
    f.add(jb6);

    jb1.setToolTipText("Settings");
    jb2.setToolTipText("Weekly Timer");
    jb3.setToolTipText("Program List");
    jb4.setToolTipText("Store");
    jb5.setToolTipText("Run");
    jb6.setToolTipText("Connect");

    System.out.println(System.getProperty("user.dir"));

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setJMenuBar(m);
    f.setLayout(new FlowLayout()) ;
    f.setVisible(true) ;

}


public static void main(String[] arg)
{
        MenuWindow w = new MenuWindow() ;

}

}

SettingsWindow.java

import java.awt.*;
import javax.swing.*;

public class SettingsWindow 
{

JFrame f;
JButton b1, b2, b3; 

public SettingsWindow() 
{
    f = new JFrame ("Settings") ;
    f.setSize(400, 400) ;

    ImageIcon TempuratureIc = new ImageIcon("heat.png");
    b1 = new JButton(TempuratureIc);
    b1.setFocusPainted(false);
    //b1.setBorderPainted(false);
    b1.setContentAreaFilled(false);

    ImageIcon TimeIc = new ImageIcon("timetable.png");
    b2 = new JButton(TimeIc);
    b2.setFocusPainted(false);
    //b2.setBorderPainted(false);
    b2.setContentAreaFilled(false);

    ImageIcon ProfileIc = new ImageIcon("graph.png");
    b3 = new JButton(ProfileIc);
    b3.setFocusPainted(false);
    //b3.setBorderPainted(false);
    b3.setContentAreaFilled(false);

    f.add(b1);
    f.add(b2);
    f.add(b3);

    b1.setToolTipText("Temperature Settings");
    b2.setToolTipText("Time Settings");
    b3.setToolTipText("Profile Settings");

    System.out.println(System.getProperty("user.dir"));

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setLayout(new FlowLayout());
    f.setVisible(true);

}

public static void main(String[] arg)
{
    SettingsWindow w = new SettingsWindow() ;
}

}

Can anyone please explain in detail? I am very new to Java.

Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
Aditya
  • 23
  • 3
  • 1
    Yes, it is (assuming both classes will show a different window). There's a [video tutorial](http://www.youtube.com/watch?v=39uiXsc6dWw) where it explains how to acomplish this task. – Luiggi Mendoza Jan 20 '13 at 05:41

3 Answers3

2

Pass the reference of the SettingWindow object to MenuWindow. And use setVisible method when clicked on the button action in the MenuWindow class.

UPDATE - 1:

Add ActionListener to the jb1 (I assumed that this is the button that calls SettingsWindow) and call the SettingWindow when clicked on the button.

 jb1.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {
        new SettingWindow();
    }
});

Also remove main from the SettingWindow class. It is not required.

UPDATE - 2:

Here in your code you have added a button like the following code:

ImageIcon SettingsIc = new ImageIcon("settings.png");
jb1 = new JButton(SettingsIc);
jb1.setFocusPainted(false);
jb1.setContentAreaFilled(false);
jb1.addActionListener(new ActionListener() {

  @Override
  public void actionPerformed(ActionEvent arg0) {
     new SettingWindow();
  }
 });

So you have added a button. When the button is clicked an action should be called. Write an ActionListener to this button such that it pops up the corresponding window. Similarly make different windows and call them by writing ActionListener to all the buttons like I states above. Also read about How to write ActionListener

Amarnath
  • 8,736
  • 10
  • 54
  • 81
1

In SettingWindow, class constructor, add mnuwindow=new MenuWindow(this);. In MenuWindow class constructor, add frame.setVisible(false);. In the mouseClicked(MouseEvent me)add mnuwindow.getframe().setVisible(true);.

Govind Balaji
  • 639
  • 6
  • 17
1

See The Use of Multiple JFrames, Good/Bad Practice?

Use a modal JDialog or a JOptionPane for the 2nd 'child' window instead.

enter image description here

package menuwindow;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class MenuWindow {

    JFrame f;
    JMenuBar m;
    JMenu File, Settings, Timer, Programs, Store, Run, Help;
    JMenuItem m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12;
    JButton jb1, jb2, jb3, jb4, jb5, jb6;

    public MenuWindow() {

        f = new JFrame("Reflow");
        f.setSize(600, 600);
        m = new JMenuBar();
        File = new JMenu("File");
        Settings = new JMenu("Settings");
        Timer = new JMenu("Timer");
        Programs = new JMenu("Programs");
        Store = new JMenu("Store");
        Run = new JMenu("Run");
        Help = new JMenu("Help");
        m1 = new JMenuItem("Exit");
        m2 = new JMenuItem("Temperature");
        m3 = new JMenuItem("Clock");
        m4 = new JMenuItem("Profile");
        m5 = new JMenuItem(" Weekly Timer");
        m6 = new JMenuItem("Preset Programs");
        m7 = new JMenuItem("Errors");
        m8 = new JMenuItem("Profile");
        m9 = new JMenuItem("Auto Run");
        m10 = new JMenuItem("Profile Run");
        m11 = new JMenuItem("Manual Run");
        m12 = new JMenuItem("About");


        Icon SettingsIc = UIManager.getIcon("OptionPane.questionIcon");
                //new ImageIcon("settings.png");
        ActionListener al = new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                new SettingsWindow(f);
            }
        };
        jb1 = new JButton(SettingsIc);
        jb1.addActionListener(al);
        jb1.setFocusPainted(false);
        //jb1.setBorderPainted(false); 
        jb1.setContentAreaFilled(false);

        ImageIcon TimerIc = new ImageIcon("clock.png");
        jb2 = new JButton(TimerIc);
        jb2.setFocusPainted(false);
        //jb2.setBorderPainted(false); 
        jb2.setContentAreaFilled(false);

        ImageIcon ProgramsIc = new ImageIcon("programs.png");
        jb3 = new JButton(ProgramsIc);
        jb3.setFocusPainted(false);
        //jb3.setBorderPainted(false); 
        jb3.setContentAreaFilled(false);

        ImageIcon StoreIc = new ImageIcon("store.png");
        jb4 = new JButton(StoreIc);
        jb4.setFocusPainted(false);
        //jb4.setBorderPainted(false); 
        jb4.setContentAreaFilled(false);

        ImageIcon RunIc = new ImageIcon("run.png");
        jb5 = new JButton(RunIc);
        jb5.setFocusPainted(false);
        //jb5.setBorderPainted(false); 
        jb5.setContentAreaFilled(false);

        ImageIcon ConnectIc = new ImageIcon("connect.png");
        jb6 = new JButton(ConnectIc);
        jb6.setFocusPainted(false);
        //jb6.setBorderPainted(false); 
        jb6.setContentAreaFilled(false);

        File.add(m1);
        Settings.add(m2);
        Settings.add(m3);
        Settings.add(m4);
        Timer.add(m5);
        Programs.add(m6);
        Store.add(m7);
        Store.add(m8);
        Run.add(m9);
        Run.add(m10);
        Run.add(m11);
        Help.add(m12);
        m.add(File);
        m.add(Settings);
        m.add(Timer);
        m.add(Programs);
        m.add(Store);
        m.add(Run);
        m.add(Help);
        f.add(m);
        f.add(jb1);
        f.add(jb2);
        f.add(jb3);
        f.add(jb4);
        f.add(jb5);
        f.add(jb6);

        jb1.setToolTipText("Settings");
        jb2.setToolTipText("Weekly Timer");
        jb3.setToolTipText("Program List");
        jb4.setToolTipText("Store");
        jb5.setToolTipText("Run");
        jb6.setToolTipText("Connect");

        System.out.println(System.getProperty("user.dir"));

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setJMenuBar(m);
        f.setLayout(new FlowLayout());
        f.setVisible(true);

    }

    public static void main(String[] arg) {
        MenuWindow w = new MenuWindow();

    }
}

class SettingsWindow {

    JFrame f;
    JButton b1, b2, b3;

    public SettingsWindow(Container c) {
        JPanel f = new JPanel(new FlowLayout());
        //f.setSize(400, 400);

        Icon TempuratureIc = UIManager.getIcon("OptionPane.warningIcon");
        b1 = new JButton(TempuratureIc);
        b1.setFocusPainted(false);
        //b1.setBorderPainted(false);
        b1.setContentAreaFilled(false);

        Icon TimeIc = UIManager.getIcon("OptionPane.errorIcon");
        b2 = new JButton(TimeIc);
        b2.setFocusPainted(false);
        //b2.setBorderPainted(false);
        b2.setContentAreaFilled(false);

        Icon ProfileIc = UIManager.getIcon("OptionPane.informationIcon");
        b3 = new JButton(ProfileIc);
        b3.setFocusPainted(false);
        //b3.setBorderPainted(false);
        b3.setContentAreaFilled(false);

        f.add(b1);
        f.add(b2);
        f.add(b3);

        b1.setToolTipText("Temperature Settings");
        b2.setToolTipText("Time Settings");
        b3.setToolTipText("Profile Settings");

        System.out.println(System.getProperty("user.dir"));

        //f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //f.setLayout();
        //f.setVisible(true);

        JOptionPane.showMessageDialog(c, f, "Settings", JOptionPane.QUESTION_MESSAGE);
    }
}
Community
  • 1
  • 1
Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
  • this works, but the problem is that I have to link nearly 12 windows to each other. doing all that in just one code will be a disaster – Aditya Jan 20 '13 at 08:03
  • *"link nearly 12 windows to each other"* You planned to have a dozen frames on-screen at once, and thought it might be successful? BTW - The linked thread suggests many alternatives to either modal dialogs or option panes. Be sure to read it before commenting further. – Andrew Thompson Jan 20 '13 at 08:05