Trying to Update Values of JThermometer and JSliders Dynamically in a for loop

40 Views Asked by At

I am new in java and trying to create a dashboard where I have N number of sensors and now i wants to show values of Humidity and temperature of each sensor in a separate panels . So firstly i have created N number of panels containing a JSlider and JThermometer for Humidity and temperature each. Now in a loop it reads the lines of outputs from arduino and i am trying to provide that values to that thermometers and sliders . But i am not able to differentiate that output for which panel it is goin to set . even when i tried to set values to them it is not working at all. Kindly give any idea how can i implement. Thank you for help.

Java version - 18.0.1.1 IDE - Apache netbeans 14



 static JTextField txtTemp, txtMois;
    static JLabel lblTemp, lblMois;
    static JSlider slider1, slider2;
    static JThermometer th1, th2 ;
    static JPanel JP1, JP ;
  public void interfaces(){
    
        
     
        ///Here number of panels is 2
        if(count1 > 0){
            for(int i = 0 ; i<=count1 ; i++){
             JP1 = myPanel(i,0,0);
                   add(JP1);
            }
        }
        
setVisible(true);
setTitle("Temperature and Humidity");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(1200,800);
getContentPane().setBackground(Color.lightGray);

setMinimumSize(new Dimension(350,450));
setLayout(null);

SerialPort[] AvailablePorts = SerialPort.getCommPorts();
SerialPort currPort = AvailablePorts[0];
for (SerialPort S : AvailablePorts) {
    System.out.println("\n " + S.toString());
    currPort = S;
}
int BaudRate = 9600;
int DataBits = 8;
int StopBits = SerialPort.ONE_STOP_BIT;
int Parity = SerialPort.NO_PARITY;
System.out.println("\n  " + currPort.getSystemPortName());
currPort.setComPortParameters(BaudRate,
        DataBits,
        StopBits,
        Parity);
currPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_BLOCKING,
        1000,
        0);
currPort.openPort();
if (currPort.isOpen())
{
    System.out.println("is Open ");
} else {
    System.out.println(" Port not open ");
}
try {
    while (true) {
        try{input = new BufferedReader(new InputStreamReader(currPort.getInputStream()));
String Line1 = input.readLine();
int count = 0;
String[] Data = Line1.split(" ");
for(int i = 0; i < Data.length; i++){
    
    count +=1;
    String[] Final_data = Data[i].split(",");
    double temp, mois;
    try{ temp = Double.parseDouble(Final_data[0]);
    mois = Double.parseDouble(Final_data[1]);
    System.out.println("Temparature : " + temp);
    System.out.println("Humidity : " + mois);
                   
                th1.setValue(temp);
                th2.setValue(mois);
                slider1.setValue((int) temp);
                slider2.setValue((int) mois);
                txtTemp.setText(String.valueOf(temp));   
                txtMois.setText(String.valueOf(mois));

    }
    catch(NumberFormatException e){
        System.out.println(e.toString());
        
    }
}
}
catch(SerialPortTimeoutException ex){
    System.out.println(ex);
}
    }
} catch (Exception e) {
    
    e.printStackTrace();
}


currPort.closePort();
        
    }

//MyPannel funaction

  public static JPanel myPanel(int count, double temp, double mois){
     JP = new JPanel();
    int width = (count-1)*420;
    test = new JTextField(String.valueOf(count));
    test.setBounds(0, 0, 200, 20);
    JP.add(test);
    
    th1 = new JThermometer();
        th1.setBounds(10, 50, 150,300);
        th1.setValue(0);
        th1.setBackground(new Color(0,0,0,0));
        th1.setForeground(Color.white);
        String color = th1.getBackground().toString();
        
        slider1 = new JSlider(JSlider.VERTICAL,0,100,0);
        slider1.setBounds(110, 60, 50, 230);
        slider1.setMinorTickSpacing(2);  
        slider1.setMajorTickSpacing(10);  
        slider1.setPaintTicks(true);  
        slider1.setPaintLabels(true);
        slider1.setForeground(Color.white);
        slider1.setBackground(new Color(0,0,0,0));
        
        lblTemp = new JLabel("TEMPERATURE",SwingConstants.CENTER);
        lblTemp.setBounds(15,30,140,30);
        lblTemp.setForeground(Color.WHITE);
        lblTemp.setFont(new Font("Arial", Font.BOLD, 20));
        lblTemp.setBackground(Color.getColor(color));
        txtTemp = new JTextField();
        txtTemp.setFont(new Font("Arial", Font.BOLD, 16));
        txtTemp.setBounds(115,300,50,30);
        
        th2 = new JThermometer();
        th2.setBounds(210, 50, 150, 300);
        th2.setValue(0);
        th2.setBackground(new Color(0,0,0,0));
        th2.setForeground(Color.white);
        
        slider2 = new JSlider(JSlider.VERTICAL,0,100,0);
        slider2.setBounds(310, 60, 50, 230);
        slider2.setMinorTickSpacing(2);  
        slider2.setMajorTickSpacing(10);  
        slider2.setPaintTicks(true);  
        slider2.setPaintLabels(true);
        slider2.setBackground(new Color(0,0,0,0));
        slider2.setForeground(Color.white);
        
        lblMois = new JLabel("HUMIDITY",SwingConstants.CENTER);
        lblMois.setBounds(215,30,140,30);
        lblMois.setFont(new Font("Arial", Font.BOLD, 20));
        lblMois.setForeground(Color.WHITE);
        txtMois = new JTextField();
        txtMois.setFont(new Font("Arial", Font.BOLD, 16));
        txtMois.setBounds(315,300,50,30);
    
        JP.add(lblTemp);
        JP.add(txtTemp);
        JP.add(lblMois);
        JP.add(txtMois);
        JP.add(th1,BorderLayout.CENTER);
        JP.add(slider1);     
        JP.add(slider2);
        
        JP.add(th2,BorderLayout.CENTER);
    JP.setBounds(width, 20, 400, 400);
    JP.setVisible(true);
    JP.setLayout(new java.awt.BorderLayout());
JP.validate();
    //JP.add(txt);
    return JP;
    }

//and arduino output will be like this.. 29.5,56.9 25.5,40.3 29.5,54,8 25.5,40.0 so on...

0

There are 0 best solutions below