Как вызвать другой класс к моему главному классу меню, используя JMenuItem?
Я не знаю, как вызвать другой класс (называемый Calc), который находится в том же пакете, что и мой основной класс (Lista), используя JMenuItem. Если мне нужно быть более конкретным, я не знаю, как вызвать мой класс Calc в мой класс Lista, используя JMenuItem, который есть в моем классе 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 extends 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);
}}
Единственное, что я хочу сделать, это то, что: когда я щелкаю в коде JMenuItem в Lista, вызывается моя программа калькулятора (класс Calc). Я уже пытался сделать: "Calc calc = new Calc(); calc.Visible(true);" или "item = calc;" но провалился. Ребята, я начинающий программист, извините, я думаю, это просто.
3 ответа
Фелипе, это сработало для меня... Это основано на ответе Санджив Саха...
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();
}
});
}
}
и Листа класс...
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);
}
}
Один простой способ вызова методов из другого класса - получить ссылку на другой класс и вызвать метод. Если объект другого класса уже существует, то не делайте этого, создавая новый объект, а скорее передайте ссылку из существующего объекта в этот класс. Как именно это будет сделано, будет зависеть от кода, который вы еще не показали нам.
Обратите внимание, что ваш код может быть запущен только из одного основного метода, и я уверен, что он не будет основным методом, который вы здесь используете в опубликованном вами коде, а скорее будет из другого основного метода в другом классе, но снова все это будет зависеть от кода, который вы еще не показали нам. Вы можете обнаружить тему здесь, и вам следует подумать об улучшении вашего вопроса, показывая более подходящий код, включая то, как вы планируете запускать этот класс, будет ли он запускаться из другого класса, как этот класс делает и как выглядит, что методы из другого класса, которые вы хотите вызвать из этого....
Существуют более эффективные способы, в том числе MVC, но это, вероятно, только смущает вас на данном этапе, но было бы хорошо, если бы вы знали, что это текущее решение, которое я предложил выше, хотя и простое, не самое чистое.
Похоже, вы пытаетесь создать и отобразить второй JFrame с этим кодом, и если это так, вы не хотите этого делать. Пожалуйста, смотрите: Использование нескольких JFrames, хорошая / плохая практика?,
На самом деле, вам, вероятно, лучше сделать так, чтобы Lista не расширяла JFrame, а вместо этого заставляла его создавать и создавать JMenu, который затем можно было бы разместить где и когда вам это нужно, но опять же, для полного ответа на ваш вопрос потребуются знания, полученные из кода. что вы еще не показали нам.
Не могли бы вы внести следующие изменения в ваши классы и увидеть результат:
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
- Класс сделан для продления
JDialog
вместоJFrame
- Конструктор изменен так, что принимает владельца
JFrame
(Lista
в качестве аргумента. - Было много локальных переменных
JTextField
,JButton
,JLabel
и т.д. Все они являются переменными экземпляра.
Надеюсь, это поможет вам.