有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

公共类中的java JComboBox

enter code here您好,我是Java的新开发人员,我想在公共类中放置一个JComboBox来获取所选项目,但Java无法识别它,例如,我想这样做

myComboBox.getSelectedItem().toString()

当我尝试放置JTextField时,效果很好

对不起,我的表达我英语说得不太好

这是我的密码

package guarderia;

import java.awt.BorderLayout;

public class enfermedades extends JFrame {

    private JPanel contentPane;
    private JTextField txtid;
    private JTextField textField_1;
    private JTextField txtnom;
    private static JTable table;



    //VARIABLES PARA CONEXION A MYSQL
    static Connection con;
    static CallableStatement ps;
    static ResultSet rs;
    static DefaultTableModel tm;
    static Statement sql;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    enfermedades frame = new enfermedades();
                    frame.setVisible(true);
                    llenar();

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public enfermedades() {


        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 1211, 663);
        contentPane = new JPanel();
        contentPane.setBackground(new Color(255, 255, 255));
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JPanel panel = new JPanel();
        panel.setLayout(null);
        panel.setBackground(new Color(0, 0, 0));
        panel.setBounds(0, 0, 1624, 53);
        contentPane.add(panel);

        JLabel lblEnfermedades = new JLabel("ENFERMEDADES");
        lblEnfermedades.setForeground(Color.WHITE);
        lblEnfermedades.setFont(new Font("Dialog", Font.BOLD, 19));
        lblEnfermedades.setBounds(12, 12, 231, 41);
        panel.add(lblEnfermedades);

        JPanel panel_1 = new JPanel();
        panel_1.setLayout(null);
        panel_1.setBounds(10, 102, 426, 510);
        contentPane.add(panel_1);

        JLabel lblIdNio = new JLabel("ID Niño");
        lblIdNio.setBounds(12, 30, 70, 15);
        panel_1.add(lblIdNio);

        txtid = new JTextField();
        txtid.addKeyListener(new KeyAdapter() {
            @Override
            public void keyTyped(KeyEvent e) {
                int c = e.getKeyChar();
                if (c < '0' || c > '9') e.consume();
                    }

            @Override
            public void keyReleased(KeyEvent e) {
                con= (Connection) conexion.conectar();
                try {
                    if (txtid.getText().equals(""))
                    {
                        txtnom.setText("");
                    }
                    ps = (CallableStatement) con.prepareCall("{call select_nin (?) }");
                    ps.setLong(1, Integer.parseInt(txtid.getText()));



                    ResultSet res = ps.executeQuery();


                    if (res.next())
                    {
                    String tipo = res.getString("Nombre");
                    txtnom.setText(tipo);
                    llenar();
                    }
                    else
                    {
                        txtnom.setText(null);

                    }
                } catch (SQLException e1) {
                    JOptionPane.showMessageDialog(null, e1 );
                    }





            }


        });
        txtid.setColumns(10);
        txtid.setBounds(120, 28, 146, 19);
        panel_1.add(txtid);



        JLabel cbi = new JLabel("Enfermedad");
        cbi.setBounds(12, 95, 194, 15);
        panel_1.add(cbi);

        JLabel lblTratamiento = new JLabel("Tratamiento");
        lblTratamiento.setBounds(12, 130, 194, 15);
        panel_1.add(lblTratamiento);

        JButton btnNueva = new JButton("Nueva");
        btnNueva.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {


            }
        });
        btnNueva.setBounds(282, 90, 88, 25);
        panel_1.add(btnNueva);

        JTextPane textPane = new JTextPane();
        textPane.setBounds(12, 157, 402, 118);
        panel_1.add(textPane);

        JLabel lblFechaDeteccion = new JLabel("Fecha Deteccion");
        lblFechaDeteccion.setBounds(12, 299, 194, 15);
        panel_1.add(lblFechaDeteccion);

        textField_1 = new JTextField();
        textField_1.setColumns(10);
        textField_1.setBounds(135, 297, 95, 19);
        panel_1.add(textField_1);

        JLabel lblNombre = new JLabel("Nombre");
        lblNombre.setBounds(12, 61, 70, 15);
        panel_1.add(lblNombre);

        txtnom = new JTextField();
        txtnom.setEditable(false);
        txtnom.setColumns(10);
        txtnom.setBounds(120, 56, 294, 19);
        panel_1.add(txtnom);

        JLabel lblMedidadRecomendadas = new JLabel("Medidas recomendadas");
        lblMedidadRecomendadas.setBounds(12, 330, 194, 15);
        panel_1.add(lblMedidadRecomendadas);

        JTextPane textPane_1 = new JTextPane();
        textPane_1.setBounds(12, 355, 402, 93);
        panel_1.add(textPane_1);

        JButton btnGuardar = new JButton("Guardar");
        btnGuardar.setBounds(297, 470, 117, 25);
        panel_1.add(btnGuardar);

        JComboBox cbx = new JComboBox();
        cbx.setBounds(120, 90, 146, 24);
        panel_1.add(cbx);

        JPanel panel_2 = new JPanel();
        panel_2.setLayout(null);
        panel_2.setBackground(new Color(220, 20, 60));
        panel_2.setBounds(10, 65, 426, 32);
        contentPane.add(panel_2);

        JLabel lblRegistrarEnfermedad = new JLabel("Registrar enfermedad");
        lblRegistrarEnfermedad.setForeground(Color.WHITE);
        lblRegistrarEnfermedad.setFont(new Font("Dialog", Font.BOLD, 19));
        lblRegistrarEnfermedad.setBounds(12, 5, 401, 23);
        panel_2.add(lblRegistrarEnfermedad);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(448, 102, 751, 510);
        contentPane.add(scrollPane);

        table = new JTable();
        scrollPane.setViewportView(table);

        JPanel panel_3 = new JPanel();
        panel_3.setLayout(null);
        panel_3.setBackground(new Color(128, 0, 128));
        panel_3.setBounds(448, 65, 751, 32);
        contentPane.add(panel_3);

        JLabel lblEnfermedades_1 = new JLabel("Enfermedades");
        lblEnfermedades_1.setForeground(Color.WHITE);
        lblEnfermedades_1.setFont(new Font("Dialog", Font.BOLD, 19));
        lblEnfermedades_1.setBounds(12, 5, 401, 23);
        panel_3.add(lblEnfermedades_1);
    }



    public static void llenar()
    {
        try
        {

            con = (Connection) conexion.conectar();
            String[]titulos={"ID", "ENFERMEDAD", "DESCRIPCION", "RIESGO CONTAGIO", "TIPO"};
            String cmd = "select * from enfermedades";
            tm = new DefaultTableModel(null,titulos);
            sql = (Statement) con.createStatement();
            ResultSet rs = sql.executeQuery(cmd);
            String[]fila = new String[5];

            while(rs.next())
            {
                fila[0]= rs.getString("id");
                fila[1]= rs.getString("enfermedad");
                fila[2]= rs.getString("descripcion");
                fila[3]= rs.getString("riesgo");
                fila[4]= rs.getString("tipo");  

                tm.addRow(fila);

            }
            table.setModel(tm);
            TableColumnModel columnModel = table.getColumnModel();
            columnModel.getColumn(0).setPreferredWidth(3);
            columnModel.getColumn(1).setPreferredWidth(50);
            columnModel.getColumn(2).setPreferredWidth(290);



        }
        catch(Exception d)
        {
            JOptionPane.showMessageDialog(null, d + " No se pudo conectar.");
        }


    }
     public void ns()
     {
         cbx. //this is where not recognize the jcombobox
     }

}

共 (2) 个答案

  1. # 1 楼答案

    神奇地公开它不会让你们在世界任何地方都能访问它

    您需要拥有该实例才能访问该实例

  2. # 2 楼答案

    您的问题似乎只是一个范围可变的问题。在构造函数中声明cbx变量时,它仅在构造函数中可见。如果将声明移动到类中,则变量在整个类中可见

    因此,如果将JComboBox cbx = new JComboBox();移动到类级别,换句话说,如果将此语句移动到private JTextField txtnom;语句的正下方,那么cbx字段将在ns方法中可见

    换言之,进行以下更改:

    public class enfermedades extends JFrame {
        private JPanel contentPane;
        private JTextField txtid;
        private JTextField textField_1;
        private JTextField txtnom;
        private static JTable table;
    
        // !! added
        private JComboBox cbx = new JComboBox();
    
        // ...... code removed for brevity's sake
    
    
        public enfermedades() {
    
    
            // ...... code removed for brevity's sake
    
            panel_1.add(btnGuardar);
            // !! JComboBox cbx = new JComboBox(); // ***** Don't declare this here ****
    
    
            // ...... code removed for brevity's sake
    
    
        }
    
        // ...... code removed for brevity's sake
    
    
        public void ns() {
    
            // cbx field is now visible here
    
        }
    }
    

    代码中其他不相关的问题:

    • 避免使用空布局和设置边界。虽然对新手来说,这似乎是创建GUI的最简单方法,但相信我,事实并非如此。更好的方法是学习如何使用布局管理器并使用它们
    • mysql字段或JTable表字段都不应该是静态的。它们只能是实例(非静态)字段。这意味着您不应该尝试以静态方式访问它们
    • llenar方法不应该是静态的,您应该在创建的实例中取消它
    • 学习并遵循Java命名约定,以便其他人(我们)能够更好地理解您的代码。类名称以大写字母开头,变量和方法名称以小写字母开头
    • sql代码应该位于自己的类中,而不是GUI类的代码中
    • 您需要在GUI的主事件线程“EDT”之外的单独线程中进行sql调用