Codetown ::: a software developer's community
Hello all:
It has been a few months since my last question. Had a lot of other projects taking up my time, but I am back to fighting with my Planetarium lighting controller. I have it working, but I am sure it could be more efficient and prettier to look at.
Since my last post, I finally figured out how to create an object and was able to remove the global variables I had previously created. My application now has two files and not just the long single one primarily generated by NetBeans. This cleaned up my messy code a little, but I know that there is still more I can do. I have been trying to pull some of the functions I created out of the single file, but I am still not getting something right and I get errors. The IDE tells me that it cannot find the function if it is located in a separate file.
I want to have the establishConnection() and sendCommand() functions separated because I can actually use them in other programs that access the lighting control without going through the GUI.
I wanted to have the updateControlPanelLampOn() function separated because it would be easier for me to make changes if I did not have to constantly scroll down to where it starts in the long block of code. When I take this block out, the IDE tells me it cannot find the various controls.
Just not sure what I am doing wrong.
I pasted a portion of the code here and attached it to the post. There is also a screen capture of what the GUI looks like when it is running. If anyone can help, I would appreciate it.
Paul
import ECCS.eccsLampDevice;
import java.io.*;
import java.net.*;
import javax.swing.UIManager.*;
public class BasicRGBWCoveGUIWithOOP extends javax.swing.JFrame {
eccsLampDevice redCove = new eccsLampDevice();
eccsLampDevice grnCove = new eccsLampDevice();
eccsLampDevice bluCove = new eccsLampDevice();
eccsLampDevice rgb0Cove = new eccsLampDevice();
// IO streams.
private DataOutputStream toServer;
private DataInputStream fromServer;
/** Creates new form AdvancedRGBCoveGUI */
public BasicRGBWCoveGUIWithOOP() {
initComponents();
establishConnection();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
// Lots of code generated by NetBeans.
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
// More code here.
}
public final void establishConnection() {
try {
// Create a socket to connect to the server.
Socket socket = new Socket("192.168.10.250", 4760);
// Create an input stream to receive data from the server.
fromServer = new DataInputStream(socket.getInputStream());
// Create an output stream to send data to the server.
toServer = new DataOutputStream(socket.getOutputStream());
}
catch (IOException ex) {
System.err.println(ex);
}
}
public void sendCommand(String eccsCommand) {
try {
toServer.writeBytes(eccsCommand + "\r");
toServer.flush();
}
catch (IOException ex) {
System.err.println(ex);
}
}
public void updateControlPanelLampOn(String deviceCommand, String deviceName) {
if ("A".equals(deviceName)) {
jSliderREDCOVE.setValue(redCove.lampLevel);
jTextFieldREDCOVE.setText(String.valueOf(redCove.lampLevel));
jSliderRGBCOVE.setValue(rgb0Cove.lampLevel);
jTextFieldRGBCOVE.setText(String.valueOf(rgb0Cove.lampLevel));
}
else if ("B".equals(deviceName)) {
jSliderGRNCOVE.setValue(grnCove.lampLevel);
jTextFieldGRNCOVE.setText(String.valueOf(grnCove.lampLevel));
jSliderRGBCOVE.setValue(rgb0Cove.lampLevel);
jTextFieldRGBCOVE.setText(String.valueOf(rgb0Cove.lampLevel));
}
else if ("C".equals(deviceName)) {
jSliderBLUCOVE.setValue(bluCove.lampLevel);
jTextFieldBLUCOVE.setText(String.valueOf(bluCove.lampLevel));
jSliderRGBCOVE.setValue(rgb0Cove.lampLevel);
jTextFieldRGBCOVE.setText(String.valueOf(rgb0Cove.lampLevel));
}
else if ("ABC".equals(deviceName)) {
jSliderREDCOVE.setValue(redCove.lampLevel);
jTextFieldREDCOVE.setText(String.valueOf(redCove.lampLevel));
jSliderGRNCOVE.setValue(grnCove.lampLevel);
jTextFieldGRNCOVE.setText(String.valueOf(grnCove.lampLevel));
jSliderBLUCOVE.setValue(bluCove.lampLevel);
jTextFieldBLUCOVE.setText(String.valueOf(bluCove.lampLevel));
jSliderRGBCOVE.setValue(rgb0Cove.lampLevel);
jTextFieldRGBCOVE.setText(String.valueOf(rgb0Cove.lampLevel));
}
sendCommand(deviceCommand + ":100:" + deviceName);
}
}
Tags:
Codetown is a social network. It's got blogs, forums, groups, personal pages and more! You might think of Codetown as a funky camper van with lots of compartments for your stuff and a great multimedia system, too! Best of all, Codetown has room for all of your friends.
Created by Michael Levin Dec 18, 2008 at 6:56pm. Last updated by Michael Levin May 4, 2018.
Check out the Codetown Jobs group.

At the recent GitHub Universe 2025 developer conference, Arm unveiled the Cloud migration assistant custom agent, a tool designed to help developers automate, optimize, and accelerate the migration of their x86 cloud workflows to Arm infrastructure.
By Sergio De Simone
Andrea Peruffo explains the power of server-side WebAssembly, especially on the JVM. Using Red Hat's Chicory runtime, he details how to achieve secure sandboxing, fault isolation, and cross-architecture portability without foreign function interfaces. Learn through case studies how WebAssembly solves real-world enterprise problems, including achieving 10x - 40x speedups with AOT compilation.
By Andrea Peruffo
System Initiative recently announced a major set of new capabilities designed to give engineering organizations instant, real-time visibility and AI-driven control across any cloud platform or API.
By Craig Risi
Memori is an innovative, open-source memory system that empowers AI agents with structured, long-term memory using standard databases like SQL and MongoDB. It seamlessly integrates into existing frameworks, enabling efficient data extraction and retrieval without vendor lock-in. Ideal for developers, Memori's modular design ensures reliability and scalability for next-gen intelligent systems.
By Robert Krzaczyński
Discord has detailed how it rebuilt its machine learning platform after hitting the limits of single-GPU training. The changes enabled daily retrains for large models and contributed to a 200% uplift in a key ads ranking metric.
By Matt Foster
© 2025 Created by Michael Levin.
Powered by