Another question on refactoring my NetBeans generated GUI code

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);
    }
}

Views: 135

Attachments:

Reply to This

Happy 10th year, JCertif!

Notes

Welcome to Codetown!

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.

When you create a profile for yourself you get a personal page automatically. That's where you can be creative and do your own thing. People who want to get to know you will click on your name or picture and…
Continue

Created by Michael Levin Dec 18, 2008 at 6:56pm. Last updated by Michael Levin May 4, 2018.

Looking for Jobs or Staff?

Check out the Codetown Jobs group.

 

Enjoy the site? Support Codetown with your donation.



InfoQ Reading List

Presentation: From Dashboard Soup to Observability Lasagna: Building Better Layers

Martha Lambert introduces the "Observability Lasagna" - a four-layer framework (Overview, System, Logs, Traces) focused on connecting layers for an optimized debugging UX. Learn practical tips for instrumentation, visualizing limits, and using event logs/exemplars to shift from general metrics to user-impact focused triaging. Essential for engineering leaders aiming for system reliability.

By Martha Lambert

AWS Disruption Exposes Fragility in Critical Cloud Infrastructure

On October 20, 2025, Amazon Web Services (AWS) experienced a major outage that disrupted global internet services, affecting millions of users and thousands of companies across more than 60 countries. The incident originated in the US-EAST-1 region and was traced to a DNS resolution failure affecting the DynamoDB endpoint, which cascaded into outages across multiple dependent services.

By Craig Risi

The Decisions You Don't Know You're Making: QCon Keynote Explores Hidden Choices in Engineering

Engineering teams make their most consequential decisions not in architecture reviews or sprint planning, but through invisible choices embedded in metrics, defaults, and everyday behaviors. In their QCon San Francisco 2025 keynote, Shawna Martell and Dan Fike challenged the industry's focus on documented decision-making while the decisions that truly shape systems and culture go unrecognized.

By Eran Stiller

Parting the Clouds: The Rise of Disaggregated Systems by Murat Demirbas at QCon SF 2025

Cloud computing is evolving through disaggregation, addressing inefficiencies of traditional architectures by decoupling compute and storage. This shift enhances scalability, fault isolation, and operational simplicity, driven by advancements in networking. As seen in cloud databases such as Amazon Aurora, embracing these principles enables true economic optimization and innovative design.

By Steef-Jan Wiggers

Cloudflare Workflows Adds Python Support for Durable AI Pipelines

Innovative Cloudflare Workflows now supports both TypeScript and Python, enabling developers to orchestrate complex applications seamlessly. With durable execution and state persistence, it simplifies the development of robust data pipelines and AI/ML models. Experience enhanced concurrency and intuitive design, making orchestration effortless for Python enthusiasts.

By Steef-Jan Wiggers

© 2025   Created by Michael Levin.   Powered by

Badges  |  Report an Issue  |  Terms of Service