0

I use the following code to retrieve data from msysql database to a JComboBox. It was working properly. My problem is when I execute this code, if I click jCombobox, only one item is shown and it displays the related data from database.. it is not getting all the ids from database to Combobox, so that i can select a particular id and display related data.

package Swings;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.*;

import javax.swing.*;

class Frame3 extends JFrame implements ActionListener,ItemListener
{
private JFrame frame;
JPanel panel=new JPanel();
JButton btn1,btn2,btn3;
JLabel l1, l2, l3, l4, l5, l6, l7;
private JComboBox SummonIdbox;
private JTextField txtcarLicenceNo;
private JTextField txtamount;
private JTextField txtdateFined;
private JTextField txtlocation;
private JTextField txtofficerInCharge;
  String dbURL = "jdbc:mysql://localhost:3306/cpss";
  String username ="root";
  String password = "root";

  Connection c = null;
  Statement st = null;
  ResultSet rs = null;


Frame3()
{

        setVisible(true);
        setSize(700, 700);
        setLayout(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("CPSS Application");

        l1 = new JLabel("Update Summon Details");
        l1.setForeground(Color.blue);
        l1.setFont(new Font("Serif", Font.BOLD, 20));

        l2 = new JLabel("SummonId");
        l3 = new JLabel("Car LicenceNo:");
        l4 = new JLabel("Amount");
        l5 = new JLabel("DateFined");
        l6 = new JLabel("Location");
        l7 = new JLabel("Officer Incharge");

        SummonIdbox = new JComboBox();
        txtcarLicenceNo = new JTextField();
        txtamount = new JTextField();
        txtdateFined = new JTextField();
        txtlocation = new JTextField();
        txtofficerInCharge=new JTextField();

        btn1 = new JButton("Update");
        btn2 = new JButton("Clear");
        btn3=  new JButton("Home");

        btn1.addActionListener(this);
        btn2.addActionListener(this);
        btn3.addActionListener(this);
        SummonIdbox.addItemListener(this);


        l1.setBounds(500, 30, 400, 30);
        l2.setBounds(400, 70, 200, 30);
        l3.setBounds(400, 110, 200, 30);
        l4.setBounds(400, 150, 200, 30);
        l5.setBounds(400, 190, 200, 30);
        l6.setBounds(400, 230, 200, 30);
        l7.setBounds(400, 270, 200, 30);

        SummonIdbox.setBounds(500, 70, 200, 30);
        txtcarLicenceNo.setBounds(500, 110, 200, 30);
        txtamount.setBounds(500, 150, 200, 30);
        txtdateFined.setBounds(500, 190, 200, 30);
        txtlocation.setBounds(500, 230, 200, 30);
        txtofficerInCharge.setBounds(500, 270, 200, 30);
        btn1.setBounds(450, 350, 100, 30);
        btn2.setBounds(600, 350, 100, 30);
        btn3.setBounds(750, 350, 100, 30);

        add(l1);
        add(l2);
        add(SummonIdbox);
        add(l3);
        add(txtcarLicenceNo);
        add(l4);
        add(txtamount);
        add(l5);
        add(txtdateFined);
        add(l6);
        add(txtlocation);
        add(l7);
        add(txtofficerInCharge);
        add(btn1);
        add(btn2);
        add(btn3);
        add_summonid(SummonIdbox);

    }

@Override
public void actionPerformed(ActionEvent ae ) {
    if(ae.getSource() == btn2)
       {

         txtcarLicenceNo.setText("");
         txtamount.setText("");
         txtdateFined.setText("");
         txtlocation.setText("");
         txtofficerInCharge.setText("");
        }

else if (ae.getSource() == btn3)
     {
        SwingMenu s=new SwingMenu();
        s.setSize(800,800);
        s.setVisible(true);
     }

    }

void add_summonid(JComboBox SummonIdbox)
{
        try
        {
             //Class.forName("com.mysql.jdbc.Driver");
             //System.out.println("Driver is loaded");
              c = DriverManager.getConnection(dbURL, username, password);
             System.out.println("Connection created");
             st=c.createStatement();
             rs=st.executeQuery("select Summonid from summon");
             while(rs.next())
                SummonIdbox.addItem(rs.getInt(1));   
            // c.close();
          }
        catch (Exception ex) 
         {
             System.out.println(ex);
         }
     }

@Override
public void itemStateChanged(ItemEvent ie) {

    int item=  (Integer) SummonIdbox.getSelectedItem();
    System.out.println(item);
    String sql="select carLicenceNo,amount,dateFined,location,officerIncharge from summon where summonId='"+item+"'";

try {
        PreparedStatement pst = c.prepareStatement(sql);
        //pst.setInt(1,item);
        rs=pst.executeQuery();
        while(rs.next())
            {
            txtcarLicenceNo.setText(rs.getString(1));
            txtamount.setText(String.valueOf((rs.getDouble(2))));
            txtdateFined.setText(rs.getString(3));
            txtlocation.setText(rs.getString(4));
            txtofficerInCharge.setText(rs.getString(5));
            /*System.out.println(rs.getString(1));
            System.out.println(rs.getDouble(2));
            System.out.println(rs.getString(3));
            System.out.println(rs.getString(4));
            System.out.println(rs.getString(5));*/

            }


    } catch (SQLException e) {

        e.printStackTrace();
    }

    }
}
  • 1) Please learn common Java nomeclature (`EachWordUpperCaseClass`, `firstWordLowerCaseMethod()`, `firstWordLowerCaseAttribute` unless it is a `CONSTANT`) and use it consistently. 2) Java GUIs have to work on different OS', screen size, screen resolution etc. As such, they are not conducive to pixel perfect layout. Instead use layout managers, or [combinations of them](http://stackoverflow.com/a/5630271/418556) along with layout padding and borders for [white space](http://stackoverflow.com/a/17874718/418556). – Andrew Thompson Sep 17 '14 at 05:37
  • Avoid using `null` layouts, pixel perfect layouts are an illusion within modern ui design. There are too many factors which affect the individual size of components, none of which you can control. Swing was designed to work with layout managers at the core, discarding these will lead to no end of issues and problems that you will spend more and more time trying to rectify – MadProgrammer Sep 17 '14 at 05:39
  • You're not removing the previous entries from the combo, which is going to give you trouble. Have you tried putting in a `System.out.println` message within the `while(rs.next())` loop to see if it's returning more than one result? Have you tried executing the query against the database? – MadProgrammer Sep 17 '14 at 05:40
  • Try `setVisible()` at the _end_ of the constructor (where it _should_ be) instead of at the beginning. That might make a difference – Paul Samsotha Sep 17 '14 at 06:21

0 Answers0