2016-03-06 64 views
-1

enter code here嗨我是新的Java开发人员我想将JComboBox放入公共类中以获取选定的项目,但Java无法识别它,例如我想要执行此操作。公共类中的JComboBox

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 
    } 

} 
+0

请在代码中显示错误消息和上下文代码 –

+0

几个问题:您通常不希望公开您的字段,因为这会增加错误的风险。更好的是让它保密,然后让外部课程通过受控的公共方法来选择。下一个大问题是我们对程序的结构知之甚少,或者你想如何使用这个组件。请在您的问题中添加更多信息和相关代码。 –

+0

抱歉,我现在投入 –

回答

0

使其成为公共神奇不会让你从世界任何地方访问它。

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

1

你的问题似乎只是一个变量作用域。当你在你的构造函数中声明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 

    } 
} 

其它无关的问题:

  • 避免使用空布局和的setBounds。虽然这可能看起来是创建GUI的最简单方法,但相信我,事实并非如此。学习如何使用布局管理器并使用它们会更好。
  • 没有任何mysql字段或JTable表字段应该是静态的。它们只应该是实例(非静态)字段。这意味着你不应该试图以静态方式访问它们。
  • llenar方法不应该是静态的,你应该从你创建的实例中调用它。
  • 了解并遵循Java命名约定,以便其他人(我们)可以更好地理解您的代码。类名以大写字母开头,变量和方法名以小写字母开头。
  • 你的SQL代码应该位于它自己的类中,而不是在GUI类的代码中。
  • 您将需要在GUI的主事件线程“EDT”的单独线程中进行sql调用。