views:

41

answers:

2

We are developing a java program for school. But we are experiencing problems with sending out a variable created by 3 sliders. The idea is that we have 3 sliders. One slider for every color. Red green and blue. The variable has to have a value between 0 and 255. Everytime the value of the slider changes is has to send a variable for the channel, that value is 1, 2 ,3. And after that it has to send the value of the slider through the serial port. Could you please help us out by creating an example program? Below is our code so far. Thanks in advance.

Sjaak

package main;

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import app.Com;
import app.Parameters;






public class menu{
  JSlider sliderblauw;
  JLabel hoeveelblauw;
  JLabel blauw;
  JLabel rood;
  JSlider sliderrood;
  JLabel hoeveelrood;
  JLabel groen;
  JLabel hoeveelgroen;
  JSlider slidergroen;


  public menu(){
    Frame venster = new JFrame("Color control");
    JPanel blauwinstel = new JPanel();
    ((JFrame) venster).setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    venster.setSize(500, 500);
    venster.setVisible(true);


    sliderblauw = new JSlider(JSlider.VERTICAL, 0, 255, 0);
    sliderblauw.addChangeListener(new veranderingblauw());
    hoeveelblauw = new JLabel ("0");
        blauwinstel.add(sliderblauw);
        blauwinstel.add(hoeveelblauw);  
        venster.add(blauwinstel, BorderLayout.WEST);
            sliderblauw.setMajorTickSpacing(10);  
            sliderblauw.setPaintTicks(true);

    JPanel roodinstel = new JPanel();
    sliderrood = new JSlider(JSlider.VERTICAL, 0, 255, 0);
    sliderrood.addChangeListener(new veranderingrood());
    hoeveelrood = new JLabel ("0");
        roodinstel.add(sliderrood);
        roodinstel.add(hoeveelrood);  
        venster.add(roodinstel, BorderLayout.EAST);
            sliderrood.setMajorTickSpacing(10);  
            sliderrood.setPaintTicks(true);


    JPanel groeninstel = new JPanel();
    slidergroen = new JSlider(JSlider.VERTICAL, 0, 255, 0);
    slidergroen.addChangeListener(new veranderinggroen());
    hoeveelgroen = new JLabel ("0");
        groeninstel.add(slidergroen);
        groeninstel.add(hoeveelgroen);  
        venster.add(groeninstel, BorderLayout.CENTER);
            slidergroen.setMajorTickSpacing(10);  
            slidergroen.setPaintTicks(true);
  }







public class veranderingblauw implements ChangeListener{
        public void stateChanged(ChangeEvent ce){
          int value = sliderblauw.getValue();
          String waarde_blauw = Integer.toString(value);
          hoeveelblauw.setText(waarde_blauw);



        }}



  public class veranderingrood implements ChangeListener{
        public void stateChanged(ChangeEvent ce){
          int value = sliderrood.getValue();
          String waarde_rood = Integer.toString(value);
          hoeveelrood.setText(waarde_rood);

        }}


  public class veranderinggroen implements ChangeListener{
        public void stateChanged(ChangeEvent ce){
          int value = slidergroen.getValue();
          String waarde_groen = Integer.toString(value);
          hoeveelgroen.setText(waarde_groen); 


        }}


  public static void main( String[] args)
  {
     new menu();

  }
  }
A: 

Inside of the ChangeListeners, you must call a method which collects the three values and then uses your custom API to write it to the serial port (Java doesn't come with a built-in API for serial IO).

Aaron Digulla
+1  A: 

Use this: http://rxtx.qbang.org/wiki/index.php/Main_Page
There are samples and everything here.

Sun used to have a JavaComm API, it looks like Oracle does not support it anymore.

Romain Hippeau