根据另一个类的组合框中的选定项启用标签和文本字段

时间:2015-11-17 13:13:37

标签: java

我有两个单独的类:SubDimensions.java和Subtraction.java。

我想根据SubDimensions类的组合框中的选定项启用Subtraction类中的一些组件。我尝试在SubDimensions类中创建一个switch语句,在Subtraction类中创建一个布尔函数,但它没有工作。我想知道可能是什么问题。

SubDimensions.java

package gui;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.SwingConstants;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JPanel;

public class SubDimensions {

    public JFrame frmSubDimensions;
    public JComboBox comboBoxA;

    /**
     * Launch the application.
     */
    public static void SubDimensions() {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    SubDimensions window = new SubDimensions();
                    window.frmSubDimensions.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public SubDimensions() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    public void initialize() {
        frmSubDimensions = new JFrame();
        frmSubDimensions.setTitle("VECTOR CALCULATOR");
        frmSubDimensions.setBounds(100, 100, 330, 200);
        frmSubDimensions.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmSubDimensions.getContentPane().setLayout(null);

        JLabel lblVectorDimension = new JLabel("Vector dimensions:");
        lblVectorDimension.setHorizontalAlignment(SwingConstants.CENTER);
        lblVectorDimension.setBounds(10, 21, 294, 14);
        frmSubDimensions.getContentPane().add(lblVectorDimension);

        comboBoxA = new JComboBox();
        comboBoxA.setModel(new DefaultComboBoxModel(new String[] {"2x1", "3x1", "4x1", "5x1", "6x1", "7x1", "8x1", "9x1", "10x1"}));
        comboBoxA.setBounds(110, 46, 95, 20);
        frmSubDimensions.getContentPane().add(comboBoxA);

        JButton btnNewButton = new JButton("Okay");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Subtraction subtraction = new Subtraction();
                subtraction.Subtraction();
                frmSubDimensions.setVisible(false);

                switch(comboBoxA.getSelectedItem().toString()){
                    case "3x1":{
                        subtraction.x3Visibility(true);
                        break;}
                    /*case "4x1":
                        lblX4.setEnabled(true);
                        break;*/
                    default:{
                        subtraction.x3Visibility(false);
                        break;}
                }
            }
        });
        btnNewButton.setBounds(62, 108, 89, 23);
        frmSubDimensions.getContentPane().add(btnNewButton);

        JButton btnCancel = new JButton("Cancel");
        btnCancel.setBounds(167, 108, 89, 23);
        frmSubDimensions.getContentPane().add(btnCancel);
    }
}

Subtraction.java

package gui;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
import javax.swing.JTextArea;

public class Subtraction {

        public JFrame frmSubtraction;
        public JTextField textFieldx1;
        public JTextField textFieldx2;
        public JTextField textFieldx3;
        public JTextField textFieldx4;
        public JTextField textFieldx5;
        public JTextField textFieldx6;
        public JTextField textFieldx7;
        public JTextField textFieldx8;
        public JTextField textFieldx9;
        public JTextField textFieldx10;
        public JTextField textFieldy1;
        public JTextField textFieldy2;
        public JTextField textFieldy3;
        public JTextField textFieldy4;
        public JTextField textFieldy5;
        public JTextField textFieldy6;
        public JTextField textFieldy7;
        public JTextField textFieldy8;
        public JTextField textFieldy9;
        public JTextField textFieldy10;
        public JLabel lblX1;
        public JLabel lblX2;
        public JLabel lblX3;
        public JLabel lblX4;
        public JLabel lblX5;
        public JLabel lblX6;
        public JLabel lblX7;
        public JLabel lblX8;
        public JLabel lblX9;
        public JLabel lblX10;
        public JLabel lblY1;
        public JLabel lblY2;
        public JLabel lblY3;
        public JLabel lblY4;
        public JLabel lblY5;
        public JLabel lblY6;
        public JLabel lblY7;
        public JLabel lblY8;
        public JLabel lblY9;
        public JLabel lblY10;

        /**
         * Launch the application.
         */
        public static void Subtraction() {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        Subtraction window = new Subtraction();
                        window.frmSubtraction.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }

        /**
         * Create the application.
         */
        public Subtraction() {
            initialize();
        }

        /**
         * Initialize the contents of the frame.
         */
        public void initialize(){
            SubDimensions subDimensions = new SubDimensions();

            frmSubtraction = new JFrame();
            frmSubtraction.setTitle("VECTOR CALCULATOR");
            frmSubtraction.setBounds(100, 100, 400, 400);
            frmSubtraction.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frmSubtraction.getContentPane().setLayout(null);

            lblX1 = new JLabel("x1");
            lblX1.setBounds(10, 32, 20, 14);
            frmSubtraction.getContentPane().add(lblX1);

            textFieldx1 = new JTextField();
            textFieldx1.setBounds(40, 29, 50, 20);
            frmSubtraction.getContentPane().add(textFieldx1);
            textFieldx1.setColumns(10);

            lblX2 = new JLabel("x2");
            lblX2.setBounds(10, 60, 20, 14);
            frmSubtraction.getContentPane().add(lblX2);

            textFieldx2 = new JTextField();
            textFieldx2.setColumns(10);
            textFieldx2.setBounds(40, 57, 50, 20);
            frmSubtraction.getContentPane().add(textFieldx2);

            lblX3 = new JLabel("x3");
            lblX3.setEnabled(false);
            lblX3.setBounds(10, 88, 20, 14);
            frmSubtraction.getContentPane().add(lblX3);

            textFieldx3 = new JTextField();
            textFieldx3.setEnabled(false);
            textFieldx3.setColumns(10);
            textFieldx3.setBounds(40, 85, 50, 20);
            frmSubtraction.getContentPane().add(textFieldx3);

            lblX4 = new JLabel("x4");
            lblX4.setEnabled(false);
            lblX4.setBounds(10, 116, 20, 14);
            frmSubtraction.getContentPane().add(lblX4);

            textFieldx4 = new JTextField();
            textFieldx4.setEnabled(false);
            textFieldx4.setColumns(10);
            textFieldx4.setBounds(40, 113, 50, 20);
            frmSubtraction.getContentPane().add(textFieldx4);

            lblX5 = new JLabel("x5");
            lblX5.setEnabled(false);
            lblX5.setBounds(10, 144, 20, 14);
            frmSubtraction.getContentPane().add(lblX5);

            textFieldx5 = new JTextField();
            textFieldx5.setEnabled(false);
            textFieldx5.setColumns(10);
            textFieldx5.setBounds(40, 141, 50, 20);
            frmSubtraction.getContentPane().add(textFieldx5);

            lblX6 = new JLabel("x6");
            lblX6.setEnabled(false);
            lblX6.setBounds(10, 172, 20, 14);
            frmSubtraction.getContentPane().add(lblX6);

            textFieldx6 = new JTextField();
            textFieldx6.setEnabled(false);
            textFieldx6.setColumns(10);
            textFieldx6.setBounds(40, 169, 50, 20);
            frmSubtraction.getContentPane().add(textFieldx6);

            lblX7 = new JLabel("x7");
            lblX7.setEnabled(false);
            lblX7.setBounds(10, 200, 20, 14);
            frmSubtraction.getContentPane().add(lblX7);

            textFieldx7 = new JTextField();
            textFieldx7.setEnabled(false);
            textFieldx7.setColumns(10);
            textFieldx7.setBounds(40, 197, 50, 20);
            frmSubtraction.getContentPane().add(textFieldx7);

            lblX8 = new JLabel("x8");
            lblX8.setEnabled(false);
            lblX8.setBounds(10, 228, 20, 14);
            frmSubtraction.getContentPane().add(lblX8);

            textFieldx8 = new JTextField();
            textFieldx8.setEnabled(false);
            textFieldx8.setColumns(10);
            textFieldx8.setBounds(40, 225, 50, 20);
            frmSubtraction.getContentPane().add(textFieldx8);

            lblX9 = new JLabel("x9");
            lblX9.setEnabled(false);
            lblX9.setBounds(10, 256, 20, 14);
            frmSubtraction.getContentPane().add(lblX9);

            textFieldx9 = new JTextField();
            textFieldx9.setEnabled(false);
            textFieldx9.setColumns(10);
            textFieldx9.setBounds(40, 253, 50, 20);
            frmSubtraction.getContentPane().add(textFieldx9);

            lblX10 = new JLabel("x10");
            lblX10.setEnabled(false);
            lblX10.setBounds(10, 281, 30, 14);
            frmSubtraction.getContentPane().add(lblX10);

            textFieldx10 = new JTextField();
            textFieldx10.setEnabled(false);
            textFieldx10.setColumns(10);
            textFieldx10.setBounds(40, 281, 50, 20);
            frmSubtraction.getContentPane().add(textFieldx10);

            lblY1 = new JLabel("y1");
            lblY1.setBounds(126, 32, 20, 14);
            frmSubtraction.getContentPane().add(lblY1);

            textFieldy1 = new JTextField();
            textFieldy1.setColumns(10);
            textFieldy1.setBounds(156, 29, 50, 20);
            frmSubtraction.getContentPane().add(textFieldy1);

            lblY2 = new JLabel("y2");
            lblY2.setBounds(126, 60, 20, 14);
            frmSubtraction.getContentPane().add(lblY2);

            textFieldy2 = new JTextField();
            textFieldy2.setColumns(10);
            textFieldy2.setBounds(156, 57, 50, 20);
            frmSubtraction.getContentPane().add(textFieldy2);

            textFieldy3 = new JTextField();
            textFieldy3.setEnabled(false);
            textFieldy3.setColumns(10);
            textFieldy3.setBounds(156, 85, 50, 20);
            frmSubtraction.getContentPane().add(textFieldy3);

            lblY3 = new JLabel("y3");
            lblY3.setEnabled(false);
            lblY3.setBounds(126, 88, 20, 14);
            frmSubtraction.getContentPane().add(lblY3);

            lblY4 = new JLabel("y4");
            lblY4.setEnabled(false);
            lblY4.setBounds(126, 116, 20, 14);
            frmSubtraction.getContentPane().add(lblY4);

            textFieldy4 = new JTextField();
            textFieldy4.setEnabled(false);
            textFieldy4.setColumns(10);
            textFieldy4.setBounds(156, 113, 50, 20);
            frmSubtraction.getContentPane().add(textFieldy4);

            textFieldy5 = new JTextField();
            textFieldy5.setEnabled(false);
            textFieldy5.setColumns(10);
            textFieldy5.setBounds(156, 141, 50, 20);
            frmSubtraction.getContentPane().add(textFieldy5);

            lblY5 = new JLabel("y5");
            lblY5.setEnabled(false);
            lblY5.setBounds(126, 144, 20, 14);
            frmSubtraction.getContentPane().add(lblY5);

            lblY6 = new JLabel("y6");
            lblY6.setEnabled(false);
            lblY6.setBounds(126, 172, 20, 14);
            frmSubtraction.getContentPane().add(lblY6);

            textFieldy6 = new JTextField();
            textFieldy6.setEnabled(false);
            textFieldy6.setColumns(10);
            textFieldy6.setBounds(156, 169, 50, 20);
            frmSubtraction.getContentPane().add(textFieldy6);

            textFieldy7 = new JTextField();
            textFieldy7.setEnabled(false);
            textFieldy7.setColumns(10);
            textFieldy7.setBounds(156, 197, 50, 20);
            frmSubtraction.getContentPane().add(textFieldy7);

            lblY7 = new JLabel("y7");
            lblY7.setEnabled(false);
            lblY7.setBounds(126, 200, 20, 14);
            frmSubtraction.getContentPane().add(lblY7);

            lblY8 = new JLabel("y8");
            lblY8.setEnabled(false);
            lblY8.setBounds(126, 228, 20, 14);
            frmSubtraction.getContentPane().add(lblY8);

            textFieldy8 = new JTextField();
            textFieldy8.setEnabled(false);
            textFieldy8.setColumns(10);
            textFieldy8.setBounds(156, 225, 50, 20);
            frmSubtraction.getContentPane().add(textFieldy8);

            lblY9 = new JLabel("y9");
            lblY9.setEnabled(false);
            lblY9.setBounds(126, 256, 20, 14);
            frmSubtraction.getContentPane().add(lblY9);

            textFieldy9 = new JTextField();
            textFieldy9.setEnabled(false);
            textFieldy9.setColumns(10);
            textFieldy9.setBounds(156, 253, 50, 20);
            frmSubtraction.getContentPane().add(textFieldy9);

            textFieldy10 = new JTextField();
            textFieldy10.setEnabled(false);
            textFieldy10.setColumns(10);
            textFieldy10.setBounds(156, 281, 50, 20);
            frmSubtraction.getContentPane().add(textFieldy10);

            lblY10 = new JLabel("y10");
            lblY10.setEnabled(false);
            lblY10.setBounds(126, 281, 30, 14);
            frmSubtraction.getContentPane().add(lblY10);

            JLabel lblVectorU = new JLabel("Vector u:");
            lblVectorU.setBounds(10, 11, 80, 14);
            frmSubtraction.getContentPane().add(lblVectorU);

            JLabel lblVectorV = new JLabel("Vector v:");
            lblVectorV.setBounds(126, 11, 80, 14);
            frmSubtraction.getContentPane().add(lblVectorV);

            JTextArea textAreaZ = new JTextArea();
            textAreaZ.setEditable(false);
            textAreaZ.setBounds(251, 27, 123, 274);
            frmSubtraction.getContentPane().add(textAreaZ);

            JButton btnNewButton = new JButton("Calculate");
            btnNewButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    int x1 = Integer.parseInt(textFieldx1.getText());
                    int x2 = Integer.parseInt(textFieldx2.getText());
                    int x3 = Integer.parseInt(textFieldx3.getText());
                    int x4 = Integer.parseInt(textFieldx4.getText());
                    int x5 = Integer.parseInt(textFieldx5.getText());
                    int x6 = Integer.parseInt(textFieldx6.getText());
                    int x7 = Integer.parseInt(textFieldx7.getText());
                    int x8 = Integer.parseInt(textFieldx8.getText());
                    int x9 = Integer.parseInt(textFieldx9.getText());
                    int x10 = Integer.parseInt(textFieldx10.getText());

                    int y1 = Integer.parseInt(textFieldy1.getText());
                    int y2 = Integer.parseInt(textFieldy2.getText());
                    int y3 = Integer.parseInt(textFieldy3.getText());
                    int y4 = Integer.parseInt(textFieldy4.getText());
                    int y5 = Integer.parseInt(textFieldy5.getText());
                    int y6 = Integer.parseInt(textFieldy6.getText());
                    int y7 = Integer.parseInt(textFieldy7.getText());
                    int y8 = Integer.parseInt(textFieldy8.getText());
                    int y9 = Integer.parseInt(textFieldy9.getText());
                    int y10 = Integer.parseInt(textFieldy10.getText());

                    int z1 = x1 - y1;
                    int z2 = x2 - y2;
                    int z3 = x3 - y3;
                    int z4 = x4 - y4;
                    int z5 = x5 - y5;
                    int z6 = x6 - y6;
                    int z7 = x7 - y7;
                    int z8 = x8 - y8;
                    int z9 = x9 - y9;
                    int z10 = x10 - y10;

                    textAreaZ.setText(Integer.toString(z1) + "\n" + Integer.toString(z2) + "\n" + Integer.toString(z3) + "\n" + Integer.toString(z4) + "\n" + Integer.toString(z5) + "\n" + Integer.toString(z6) + "\n" + Integer.toString(z7) + "\n" + Integer.toString(z8) + "\n" + Integer.toString(z9) + "\n" + Integer.toString(z10));

                }
            });

            btnNewButton.setBounds(87, 327, 89, 23);
            frmSubtraction.getContentPane().add(btnNewButton);

            JButton btnCancel = new JButton("Cancel");
            btnCancel.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    subDimensions.SubDimensions();
                    frmSubtraction.setVisible(false);
                }
            });
            btnCancel.setBounds(208, 327, 89, 23);
            frmSubtraction.getContentPane().add(btnCancel);

            JLabel lblVectorUv = new JLabel("Vector u+v:");
            lblVectorUv.setBounds(251, 11, 123, 14);
            frmSubtraction.getContentPane().add(lblVectorUv);


    }

    public void x3Visibility (boolean enabled){
        lblX3.setEnabled(enabled);
        textFieldx3.setEnabled(enabled);
        lblY3.setEnabled(enabled);
        textFieldy3.setEnabled(enabled);
    }
    /*public void x4Visibility (boolean visibility){
        lblX4.setEnabled(true);
        textFieldx4.setEnabled(true);
        lblY4.setEnabled(true);
        textFieldy4.setEnabled(true);
    }*/
}

1 个答案:

答案 0 :(得分:1)

您没有在Subtraction.java中使用参数enabled,请更改为:

public void x3Visibility (boolean enabled){
lblX3.setEnabled(enabled);
textFieldx3.setEnabled(enabled);
lblY3.setEnabled(enabled);
textFieldy3.setEnabled(enabled);
}

编辑:看起来你缺乏对面向对象编程(OOP)的基本理解。

致电时

Subtraction subtraction = new Subtraction();
            subtraction.Subtraction();

您创建了另一个Subtraction实例,名为window:

public static void Subtraction() {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Subtraction window = new Subtraction();
                window.frmSubtraction.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}
substraction时,

window不可见。但是窗口不在actionPerformed的范围内,因此您无法访问它。目前,您可以将actionPerformed更改为以下以暂时解决您的问题。但我强烈建议您: 1)重新审视OOP的概念 2)尝试为您的标签和文本字段使用数组或集合,而不是逐个对其进行硬编码

public void actionPerformed(ActionEvent e) {
            Subtraction subtraction = new Subtraction();
            subtraction.frmSubtraction.setVisible(true);
            frmSubDimensions.setVisible(false);

            switch(comboBoxA.getSelectedItem().toString()){
                case "3x1":{
                    subtraction.x3Visibility(true);
                    break;}
                /*case "4x1":
                    lblX4.setEnabled(true);
                    break;*/
                default:{
                    subtraction.x3Visibility(false);
                    break;}
            }
        }