如何使用JMenuItem将另一个类调用到我的主菜单类?

时间:2016-06-05 13:51:59

标签: java swing jmenu jmenuitem jmenubar

我不知道如何使用JMenuItem调用与我的主类(Lista)位于同一包中的另一个类(称为Calc)。如果我需要更具体,我不知道如何使用我的Lista类中的JMenuItem将我的类Calc调用到我的Lista类。

以下代码是我的Lista课程,对不起英国人

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

    import javax.swing.event.MenuEvent;
    import javax.swing.event.MenuListener;

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

    public class Lista extends JFrame{
      public Lista(){
        super("Menu");

        // Menu Bar
        JMenuBar barra = new JMenuBar();
        setJMenuBar(barra);

        // Menu
        JMenu opcoes = new JMenu("Options");

        // Menu Item
        JMenuItem item = new JMenuItem("Item 1");

        // actionlistener
        item.addActionListener(
          new ActionListener(){
            public void actionPerformed(ActionEvent e){
              //I think that is in here where i must write the code
            }
          }
        );

        opcoes.add(item);

        // Adds
        barra.add(opcoes);

        setSize(300, 150);
        setVisible(true);    
      }

      public static void main(String args[]){
        Lista app = new Lista();
        app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }
    }

另一个类,Calc,它只是我用这段代码制作的简单计算器: 公共类Calc扩展了JFrame {

public Calc(){
    super("Calculadora");
    Container tela = getContentPane();
    setLayout(null);

    JLabel rotulo1 = new JLabel("1 numero: ");
    JLabel rotulo2 = new JLabel("2 numero: ");
    JLabel showup = new JLabel("");

    JTextField texto1 = new JTextField(5);
    JTextField texto2 = new JTextField(5);

    JButton somar = new JButton ("+");
    JButton subtrair = new JButton("-");
    JButton dividir = new JButton("/");
    JButton multiplicar = new JButton("x");
    JButton exibir = new JButton("=");

    rotulo1.setBounds(30,20,100,20); rotulo2.setBounds(30,60,100,20);
    texto1.setBounds(100,20,200,20); texto2.setBounds(100,60,200,20);
    showup.setBounds(125,100,200,20);
    somar.setBounds(230,100,45,45);//coluna, linha, largura, comprimento
    subtrair.setBounds(280,100,45,45);
    dividir.setBounds(230,155,45,45);
    multiplicar.setBounds(280,155,45,45);
    exibir.setBounds(255,205,45,45);


    setVisible(true);
    setLocationRelativeTo(null);

    tela.add(rotulo1); tela.add(rotulo2);
    tela.add(texto1); tela.add(texto2); tela.add(showup);
    tela.add(exibir); tela.add(somar); tela.add(subtrair); tela.add(dividir);tela.add(multiplicar);

    setSize(350,300);

    somar.addActionListener( new ActionListener(){
        public void actionPerformed(ActionEvent e){
            double numero1, numero2, soma;
            soma=0;
            numero1 = Double.parseDouble(texto1.getText());
            numero2 = Double.parseDouble(texto2.getText());
            soma = numero1+numero2;
            showup.setVisible(true);
            showup.setText(texto1.getText()+""+"+"+""+texto2.getText()+""+"="+soma);
            texto1.setText(null); texto2.setText(null); texto1.requestFocus(); //funcao limpar e focar
        }
    }
    );

    subtrair.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            double numero1, numero2, subtrair;
            subtrair=0;
            numero1 = Double.parseDouble(texto1.getText());
            numero2 = Double.parseDouble(texto2.getText());
            subtrair = numero1 - numero2;
            showup.setVisible(true);
            showup.setText(texto1.getText()+""+"-"+""+texto2.getText()+""+"="+subtrair);
            texto1.setText(null); texto2.setText(null); texto1.requestFocus();
        }
    });

    multiplicar.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            double numero1, numero2, multiplicar;
            multiplicar=0;
            numero1 = Double.parseDouble(texto1.getText());
            numero2 = Double.parseDouble(texto2.getText());
            multiplicar = numero1*numero2;
            showup.setVisible(true);
            showup.setText(texto1.getText()+""+"x"+""+texto2.getText()+""+"="+multiplicar);
            texto1.setText(null); texto2.setText(null); texto1.requestFocus();
        }
    });

    dividir.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            double numero1, numero2, dividir;
            dividir=0;
            numero1 = Double.parseDouble(texto1.getText());
            numero2 = Double.parseDouble(texto2.getText());
            dividir=numero1/numero2;
            showup.setVisible(true);
            showup.setText(texto1.getText()+""+"/"+""+texto2.getText()+""+"="+dividir);
            texto1.setText(null); texto2.setText(null); texto1.requestFocus();
        }
    });


}

public static void main (String [] args){
    Calc app = new Calc();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}}

我唯一要做的就是:当我点击Lista代码中的JMenuItem时,我的计算器程序(Calc类)被调用。我已经尝试过:" Calc calc = new Calc(); calc.Visible(真);"或" item = calc;"但是失败了。我是一名初学程序员,对不起,我觉得这很简单。

3 个答案:

答案 0 :(得分:2)

从另一个类调用方法的一种简单方法是获取对另一个类的引用并调用该方法。如果另一个类的对象已经存在,那么不要通过创建一个新对象来做到这一点,而是将现有对象的引用传递给这个类。具体如何完成将取决于您尚未向我们展示的代码。

请注意,您的代码只能从一种主要方法运行,我的赌注是它不会成为您在此处发布的代码中的主要方法,而是来自另一个主要方法另一个类中的方法,但是所有这些将依赖于您尚未向我们展示的代码。您可能在这里检测到一个主题,您应该考虑改进您的问题,显示更相关的代码,包括您计划如何启动此类,是否将从其他类启动,其他类的功能和外观,什么来自其他课程的方法,你想从这个方法打电话......

更好的处理方法,包括M-V-C,但是这可能只会让你在这个阶段感到困惑,但是你知道这个当前的解决方案对你有好处我上面提到过,虽然很容易,但并不是最干净的。

看起来您可能正在尝试使用此代码创建并显示第二个JFrame,如果是这样,您就不想这样做了。请参阅:The Use of Multiple JFrames, Good/Bad Practice?

事实上,你最好不要让Lista不扩展JFrame,而是让它创建并生成一个JMenu,然后你可以把它放在你需要的地方和时间,但话又说回来,完全回答你的问题需要从您尚未向我们展示的代码中获取的知识

答案 1 :(得分:1)

您可以在课程中进行以下更改并查看结果:

1)Lista.java

 public static void main(String args[]){
    Lista app = new Lista();        
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    app.setLocationRelativeTo(null); //so that the JFrame appears at the center of screen
  }

2)Lista.java

// actionlistener
item.addActionListener(
      new ActionListener(){
        public void actionPerformed(ActionEvent e){
          //I think that is in here where i must write the code              
          Calc calc=new Calc(Lista.this); // pass owner JFrame i.e. an instance of Lista
          calc.setVisible(true);
        }
      }
 );

3)Calc.java

import java.awt.Container;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Calc extends JDialog {

private JLabel rotulo1;
private JLabel rotulo2;
private JLabel showup;
private JTextField texto1;
private JTextField texto2;
private JButton somar;
private JButton subtrair;
private JButton dividir;
private JButton multiplicar;
private JButton exibir;

public Calc(Frame owner) {
    super(owner, "Calculadora");
    Container tela = getContentPane();
    setLayout(null);

    rotulo1 = new JLabel("1 numero: ");
    rotulo2 = new JLabel("2 numero: ");
    showup = new JLabel("");

    texto1 = new JTextField(5);
    texto2 = new JTextField(5);

    somar = new JButton("+");
    subtrair = new JButton("-");
    dividir = new JButton("/");
    multiplicar = new JButton("x");
    exibir = new JButton("=");

    rotulo1.setBounds(30, 20, 100, 20);
    rotulo2.setBounds(30, 60, 100, 20);
    texto1.setBounds(100, 20, 200, 20);
    texto2.setBounds(100, 60, 200, 20);
    showup.setBounds(125, 100, 200, 20);
    somar.setBounds(230, 100, 45, 45);// coluna, linha, largura, comprimento
    subtrair.setBounds(280, 100, 45, 45);
    dividir.setBounds(230, 155, 45, 45);
    multiplicar.setBounds(280, 155, 45, 45);
    exibir.setBounds(255, 205, 45, 45);

    setVisible(true);
    setLocationRelativeTo(null);

    tela.add(rotulo1);
    tela.add(rotulo2);
    tela.add(texto1);
    tela.add(texto2);
    tela.add(showup);
    tela.add(exibir);
    tela.add(somar);
    tela.add(subtrair);
    tela.add(dividir);
    tela.add(multiplicar);

    setSize(350, 300);

    somar.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            double numero1, numero2, soma;
            soma = 0;
            numero1 = Double.parseDouble(texto1.getText());
            numero2 = Double.parseDouble(texto2.getText());
            soma = numero1 + numero2;
            showup.setVisible(true);
            showup.setText(texto1.getText() + "" + "+" + "" + texto2.getText() + "" + "=" + soma);
            texto1.setText(null);
            texto2.setText(null);
            texto1.requestFocus(); // funcao limpar e focar
        }
    });

    subtrair.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            double numero1, numero2, subtrair;
            subtrair = 0;
            numero1 = Double.parseDouble(texto1.getText());
            numero2 = Double.parseDouble(texto2.getText());
            subtrair = numero1 - numero2;
            showup.setVisible(true);
            showup.setText(texto1.getText() + "" + "-" + "" + texto2.getText() + "" + "=" + subtrair);
            texto1.setText(null);
            texto2.setText(null);
            texto1.requestFocus();
        }
    });

    multiplicar.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            double numero1, numero2, multiplicar;
            multiplicar = 0;
            numero1 = Double.parseDouble(texto1.getText());
            numero2 = Double.parseDouble(texto2.getText());
            multiplicar = numero1 * numero2;
            showup.setVisible(true);
            showup.setText(texto1.getText() + "" + "x" + "" + texto2.getText() + "" + "=" + multiplicar);
            texto1.setText(null);
            texto2.setText(null);
            texto1.requestFocus();
        }
    });

    dividir.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            double numero1, numero2, dividir;
            dividir = 0;
            numero1 = Double.parseDouble(texto1.getText());
            numero2 = Double.parseDouble(texto2.getText());
            dividir = numero1 / numero2;
            showup.setVisible(true);
            showup.setText(texto1.getText() + "" + "/" + "" + texto2.getText() + "" + "=" + dividir);
            texto1.setText(null);
            texto2.setText(null);
            texto1.requestFocus();
        }
    });

  }

}

说明:

Calc.java

中有许多微不足道的变化
  1. 该课程旨在扩展JDialog而不是JFrame
  2. 构建器已更改,因此需要所有者JFrameLista) 作为论点。
  3. JTextFieldJButton有很多局部变量, JLabel等等。所有这些都是实例变量。
  4. 希望这对你有所帮助。

答案 2 :(得分:1)

菲利普,这对我有用......它基于Sanjeev Saha回答...

enter 

import java.awt.Container;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Calc extends JDialog {

private JLabel rotulo1;
private JLabel rotulo2;
private JLabel showup;
private JTextField texto1;
private JTextField texto2;
private JButton somar;
private JButton subtrair;
private JButton dividir;
private JButton multiplicar;
private JButton exibir;

public Calc(Frame owner) {
super(owner, "Calculadora");
Container tela = getContentPane();
setLayout(null);

rotulo1 = new JLabel("1 numero: ");
rotulo2 = new JLabel("2 numero: ");
showup = new JLabel("");

texto1 = new JTextField(5);
texto2 = new JTextField(5);

somar = new JButton("+");
subtrair = new JButton("-");
dividir = new JButton("/");
multiplicar = new JButton("x");
exibir = new JButton("=");

rotulo1.setBounds(30, 20, 100, 20);
rotulo2.setBounds(30, 60, 100, 20);
texto1.setBounds(100, 20, 200, 20);
texto2.setBounds(100, 60, 200, 20);
showup.setBounds(125, 100, 200, 20);
somar.setBounds(230, 100, 45, 45);// coluna, linha, largura, comprimento
subtrair.setBounds(280, 100, 45, 45);
dividir.setBounds(230, 155, 45, 45);
multiplicar.setBounds(280, 155, 45, 45);
exibir.setBounds(255, 205, 45, 45);

setVisible(true);
setLocationRelativeTo(null);

tela.add(rotulo1);
tela.add(rotulo2);
tela.add(texto1);
tela.add(texto2);
tela.add(showup);
tela.add(exibir);
tela.add(somar);
tela.add(subtrair);
tela.add(dividir);
tela.add(multiplicar);

setSize(350, 300);

somar.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        double numero1, numero2, soma;
        soma = 0;
        numero1 = Double.parseDouble(texto1.getText());
        numero2 = Double.parseDouble(texto2.getText());
        soma = numero1 + numero2;
        showup.setVisible(true);
        showup.setText(texto1.getText() + "" + "+" + "" + texto2.getText() + "" + "=" + soma);
        texto1.setText(null);
        texto2.setText(null);
        texto1.requestFocus(); // funcao limpar e focar
    }
});

subtrair.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        double numero1, numero2, subtrair;
        subtrair = 0;
        numero1 = Double.parseDouble(texto1.getText());
        numero2 = Double.parseDouble(texto2.getText());
        subtrair = numero1 - numero2;
        showup.setVisible(true);
        showup.setText(texto1.getText() + "" + "-" + "" + texto2.getText() + "" + "=" + subtrair);
        texto1.setText(null);
        texto2.setText(null);
        texto1.requestFocus();
    }
});

multiplicar.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        double numero1, numero2, multiplicar;
        multiplicar = 0;
        numero1 = Double.parseDouble(texto1.getText());
        numero2 = Double.parseDouble(texto2.getText());
        multiplicar = numero1 * numero2;
        showup.setVisible(true);
        showup.setText(texto1.getText() + "" + "x" + "" + texto2.getText() + "" + "=" + multiplicar);
        texto1.setText(null);
        texto2.setText(null);
        texto1.requestFocus();
    }
});

dividir.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        double numero1, numero2, dividir;
        dividir = 0;
        numero1 = Double.parseDouble(texto1.getText());
        numero2 = Double.parseDouble(texto2.getText());
        dividir = numero1 / numero2;
        showup.setVisible(true);
        showup.setText(texto1.getText() + "" + "/" + "" + texto2.getText() + "" + "=" + dividir);
        texto1.setText(null);
        texto2.setText(null);
        texto1.requestFocus();
    }
});

  }

}

和Lista类......

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

import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;

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

public class Lista extends JFrame{
  public Lista(){
    super("Menu");

    // Menu Bar
    JMenuBar barra = new JMenuBar();
    setJMenuBar(barra);

    // Menu
    JMenu opcoes = new JMenu("Options");

    // Menu Item
    JMenuItem item = new JMenuItem("Item 1");

    // actionlistener
    item.addActionListener(
      new ActionListener(){
        public void actionPerformed(ActionEvent e){
          new Calc(Lista.this);
        }
      }
    );

    opcoes.add(item);

    // Adds
    barra.add(opcoes);

    setSize(300, 150);
    setVisible(true);    
  }

  public static void main(String args[]){
    Lista app = new Lista();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}