I need help with a bit of java codeing. I have a borderlayout program with a menu bar which contains two menus. When i click on menu button i want to call a new class file which is where im stuck.
This is my main class which contains the border. Further after this code is the class i want menuNew to call.
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Main extends JFrame implements ActionListener
{
private JPanel JPanelNorth, JPanelCenter, JPanelWest, JPanelSouth, JPanelEast;
JMenuItem menuItem;
JMenu menu, submenu;
JMenuItem menuSave, menuQuit, menuAbout;
JMenuItem menuNew;
JFrame frame;
ActionListener actionListener;
JMenuBar menuBar;
private JPanel jMenuNorth;
bmitest myscreen;
public boolean RIGHT_TO_LEFT = false;
public void addComponentsToPane(Container pane)
{
if (!(pane.getLayout() instanceof BorderLayout))
{
pane.add(new JLabel("Container doesn't use BorderLayout!"));
return;
}
if (RIGHT_TO_LEFT)
{
pane.setComponentOrientation(
java.awt.ComponentOrientation.RIGHT_TO_LEFT);
}
JPanel JPanelNorth = new JPanel();
JPanelNorth.setPreferredSize(new Dimension(200, 200));
JPanelNorth.setBackground(new Color(0,0,0));
pane.add(JPanelNorth, BorderLayout.PAGE_START);
jMenuNorth = new JPanel();
pane.add(jMenuNorth, BorderLayout.PAGE_START);
jMenuNorth.setBackground(new Color(245,245,255));
menuBar = new JMenuBar();
menu = new JMenu ("File");
JMenuItem menuNew = new JMenuItem("New");
menu.add(menuNew);
menuNew.addActionListener(this);
menuBar.add(menu);
JMenuItem menuSave = new JMenuItem("Save");
menu.add(menuSave);
JMenuItem menuQuit = new JMenuItem("Quit");
menu.add(menuQuit);
//menuQuit.addActionListener(this);
menuBar.add(menu);
menu = new JMenu ("Help");
menuAbout = new JMenuItem("About");
menu.add(menuAbout);
//menuAbout.addActionListener(this);
menuBar.add(menu);
//Make the center component big, since that's the
//typical usage of BorderLayout.
JPanel JPanelCenter = new JPanel();
JPanelCenter.setPreferredSize(new Dimension(700, 700));
JPanelCenter.setBackground(new Color(100,100,100));
pane.add(JPanelCenter, BorderLayout.CENTER);
JPanel JPanelWest = new JPanel();
JPanelWest.setPreferredSize(new Dimension(200, 200));
JPanelWest.setBackground(new Color(200,200,200));
pane.add(JPanelWest, BorderLayout.LINE_START);
JPanel JPanelSouth = new JPanel();
JPanelSouth.setPreferredSize(new Dimension(200, 20));
JPanelSouth.setBackground(new Color(10,200,150));
pane.add(JPanelSouth, BorderLayout.PAGE_END);
JPanel JPanelEast = new JPanel();
JPanelEast.setPreferredSize(new Dimension(200, 200));
JPanelEast.setBackground(new Color(255,255,255));
pane.add(JPanelEast, BorderLayout.LINE_END);
}
private void createAndShowGUI()
{
//Create and set up the window.
JFrame window = new JFrame("BorderLayout");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Set up the content pane.
addComponentsToPane(window.getContentPane());
window.setJMenuBar(menuBar);
//Display the window.
window.setSize(1024, 720);
window.setVisible(true);
}
public void actionPerformed(ActionEvent arg0)
{
if (arg0.getSource()== menuNew)
{
if(myscreen == null)
{
myscreen = new bmitest();
System.out.println("hello");
}
}
}
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
Main m = new Main();
public void run()
{
m.createAndShowGUI();
}
});
}
}
Class file i want to call.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class bmitest extends JFrame
{
private static final long serialVersionUID = 1L;
public static void main(String[] args)
{
bmitest window = new bmitest();
window.setVisible(true);
}
// Declare and initialize instance variables that are
// referred to when the program is running.
private JTextField _mField = new JTextField(4); // height
private JTextField _kgField = new JTextField(4); // weight
private JTextField _bmiField = new JTextField(4); // BMI
public bmitest()
{
System.out.println("hellobmi");
// Create button and add action listener.
JButton bmiButton = new JButton("Compute BMI");
bmiButton.addActionListener(new BMIListener());
// Set layout and add components.
JPanel content = new JPanel();
content.setLayout(new FlowLayout());
content.add(new JLabel("Weight in kilograms"));
content.add(_kgField);
content.add(new JLabel("Height in meters"));
content.add(_mField);
content.add(bmiButton);
content.add(new JLabel("Your BMI is"));
content.add(_bmiField);
// Set the window characteristics.
setContentPane(content);
setTitle("Body Mass Index");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack(); // Do layout.
setLocationRelativeTo(null); // Center window.
}
private class BMIListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
double kilograms = Double.parseDouble(_kgField.getText());
double meters = Double.parseDouble(_mField.getText());
int bmi = (int)computeBMI(kilograms, meters);
_bmiField.setText("" + bmi);
}
}
public static double computeBMI(double weight, double height)
{
return weight / (height*height);
}
}
Thanks in advance
This is my main class which contains the border. Further after this code is the class i want menuNew to call.
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Main extends JFrame implements ActionListener
{
private JPanel JPanelNorth, JPanelCenter, JPanelWest, JPanelSouth, JPanelEast;
JMenuItem menuItem;
JMenu menu, submenu;
JMenuItem menuSave, menuQuit, menuAbout;
JMenuItem menuNew;
JFrame frame;
ActionListener actionListener;
JMenuBar menuBar;
private JPanel jMenuNorth;
bmitest myscreen;
public boolean RIGHT_TO_LEFT = false;
public void addComponentsToPane(Container pane)
{
if (!(pane.getLayout() instanceof BorderLayout))
{
pane.add(new JLabel("Container doesn't use BorderLayout!"));
return;
}
if (RIGHT_TO_LEFT)
{
pane.setComponentOrientation(
java.awt.ComponentOrientation.RIGHT_TO_LEFT);
}
JPanel JPanelNorth = new JPanel();
JPanelNorth.setPreferredSize(new Dimension(200, 200));
JPanelNorth.setBackground(new Color(0,0,0));
pane.add(JPanelNorth, BorderLayout.PAGE_START);
jMenuNorth = new JPanel();
pane.add(jMenuNorth, BorderLayout.PAGE_START);
jMenuNorth.setBackground(new Color(245,245,255));
menuBar = new JMenuBar();
menu = new JMenu ("File");
JMenuItem menuNew = new JMenuItem("New");
menu.add(menuNew);
menuNew.addActionListener(this);
menuBar.add(menu);
JMenuItem menuSave = new JMenuItem("Save");
menu.add(menuSave);
JMenuItem menuQuit = new JMenuItem("Quit");
menu.add(menuQuit);
//menuQuit.addActionListener(this);
menuBar.add(menu);
menu = new JMenu ("Help");
menuAbout = new JMenuItem("About");
menu.add(menuAbout);
//menuAbout.addActionListener(this);
menuBar.add(menu);
//Make the center component big, since that's the
//typical usage of BorderLayout.
JPanel JPanelCenter = new JPanel();
JPanelCenter.setPreferredSize(new Dimension(700, 700));
JPanelCenter.setBackground(new Color(100,100,100));
pane.add(JPanelCenter, BorderLayout.CENTER);
JPanel JPanelWest = new JPanel();
JPanelWest.setPreferredSize(new Dimension(200, 200));
JPanelWest.setBackground(new Color(200,200,200));
pane.add(JPanelWest, BorderLayout.LINE_START);
JPanel JPanelSouth = new JPanel();
JPanelSouth.setPreferredSize(new Dimension(200, 20));
JPanelSouth.setBackground(new Color(10,200,150));
pane.add(JPanelSouth, BorderLayout.PAGE_END);
JPanel JPanelEast = new JPanel();
JPanelEast.setPreferredSize(new Dimension(200, 200));
JPanelEast.setBackground(new Color(255,255,255));
pane.add(JPanelEast, BorderLayout.LINE_END);
}
private void createAndShowGUI()
{
//Create and set up the window.
JFrame window = new JFrame("BorderLayout");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Set up the content pane.
addComponentsToPane(window.getContentPane());
window.setJMenuBar(menuBar);
//Display the window.
window.setSize(1024, 720);
window.setVisible(true);
}
public void actionPerformed(ActionEvent arg0)
{
if (arg0.getSource()== menuNew)
{
if(myscreen == null)
{
myscreen = new bmitest();
System.out.println("hello");
}
}
}
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
Main m = new Main();
public void run()
{
m.createAndShowGUI();
}
});
}
}
Class file i want to call.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class bmitest extends JFrame
{
private static final long serialVersionUID = 1L;
public static void main(String[] args)
{
bmitest window = new bmitest();
window.setVisible(true);
}
// Declare and initialize instance variables that are
// referred to when the program is running.
private JTextField _mField = new JTextField(4); // height
private JTextField _kgField = new JTextField(4); // weight
private JTextField _bmiField = new JTextField(4); // BMI
public bmitest()
{
System.out.println("hellobmi");
// Create button and add action listener.
JButton bmiButton = new JButton("Compute BMI");
bmiButton.addActionListener(new BMIListener());
// Set layout and add components.
JPanel content = new JPanel();
content.setLayout(new FlowLayout());
content.add(new JLabel("Weight in kilograms"));
content.add(_kgField);
content.add(new JLabel("Height in meters"));
content.add(_mField);
content.add(bmiButton);
content.add(new JLabel("Your BMI is"));
content.add(_bmiField);
// Set the window characteristics.
setContentPane(content);
setTitle("Body Mass Index");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack(); // Do layout.
setLocationRelativeTo(null); // Center window.
}
private class BMIListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
double kilograms = Double.parseDouble(_kgField.getText());
double meters = Double.parseDouble(_mField.getText());
int bmi = (int)computeBMI(kilograms, meters);
_bmiField.setText("" + bmi);
}
}
public static double computeBMI(double weight, double height)
{
return weight / (height*height);
}
}
Thanks in advance
Last edited: