This week's book giveaway is in the Servlets forum.
We're giving away four copies of Murach's Java Servlets and JSP and have Joel Murach on-line!
See this thread for details.
The moose likes Swing / AWT / SWT and the fly likes retrieving variables from another class Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Murach's Java Servlets and JSP this week in the Servlets forum!
JavaRanch » Java Forums » Java » Swing / AWT / SWT
Bookmark "retrieving variables from another class" Watch "retrieving variables from another class" New topic
Author

retrieving variables from another class

M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

This program should create a GUI that has 5 classes together on a grid layout. The problem that I am having is that the user input class has the input for kwh, hours, and gallons. I am having problems getting that information from the user input class to the totals class. Can anyone help me?
user input class:


and the totals class:



The totals class should take the info from the kwh hours and gallons and do the math to get a total and display it in a JTextField(?).
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 37913
    
  22
There is something very wrong with your design, I am afraid.
You should have display classes which display the data and logic classes which do the actual calculations. You should separate the two. In fact, I think you should not even try to write a GUI until you have the calculations working correctly from the command line.
You should not try to have one unified listener for everything, but separate listeners for hours kWh and gallons. Those simply take the inputs in the text fields and convert them to numbers and pass them to the calculations class. Please count how many listeners you have. You should have one pre action required. You appear to have one in the totals class. What is that doing? Why do you want new panels?
M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

The overall look is of one panel that has the user input panel on the west, a checkbox panel in the center, the totals on the east, a greeting in the north and an exit button in the south. I have been trying to follow a workbook example and yes, this is for a class. The workbook does not give me enough information outside of the examples to get all of this together.

the user input class should accept input for kwh, hours, and gallons, the checkbox class will offer selections of appliances to choose from and the totals class would repeat the input from the user input class with a total athe the bottom. I have not got the checkbox done yet, but it is not necessary for the operation of hte user input or totals classes. I am fully confused now and trying to catch up.
M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

Write a Java™ GUI application using a NetBeans® IDE that does home utility auditing.

The user should be able to do the following:

Enter the cost per kilowatt-hour.
Select from a list of 5 to 7 home appliances, which include a washer, among other appliances.
Enter the power needed in kilowatts (kW) for the selected appliance.
Enter the number of hours used per day for the selected appliance.
If the washer is selected, enter both the number of gallons of water used by the washer per hour and the cost per gallon.

The program should do the following:

Validate that the data entered has the correct format, and is within a reasonable range.
Calculate and display the cost for operating a home appliance as soon as the data is entered.
Create a listing area to display each of the following for each appliance entered:
Home appliance
Number of hours per day
Cost
Display and update the total cost of all appliances, as soon as a new entry is added to the listing area.

The Java™ application should meet these technical requirements:
The application should have at least one additional method, in addition to the application's controlling class (a controlling class is where the main function resides).
There should be proper documentation in the source code.
Winston Gutkowski
Bartender

Joined: Mar 17, 2011
Posts: 7492
    
  18

M Gerber wrote:The overall look is of one panel that has the user input panel on the west, a checkbox panel in the center, the totals on the east, a greeting in the north and an exit button in the south...

Sounds to me like you haven't read Campbell's post, because you're still preoccupied with the display.

GUIs are verbose and fiddly, and require a lot of thought, so if you're trying to design it AND your "utility audit" logic at the same time, one of them is going to suffer.

His advice (and it's the same as I would have given) is part of the business of breaking problems down into discrete chunks that you can focus on individually; and you're not going to be able to give your utility audit logic proper attention if you're also worrying about buttons, icons and layouts.

Concentrate on the audit logic for now, and get that working; and don't include any 'J' classes (JPanel, JButton, etc) in the classes you write to implement it. When you have got it working, then will be the time to start thinking about your GUI.

Alternatively, write the GUI with dummy values, or logic that simply displays a pop-up message that says what it's doing, and forget all about the audit logic for now. Personally, I suspect it's a harder way to go, but if you're a "visual" guy, it might be easier for you.

But whatever you do, separate the audit logic from the display completely.

HIH

Winston

Isn't it funny how there's always time and money enough to do it WRONG?
Articles by Winston can be found here
Rico Felix
Ranch Hand

Joined: Mar 08, 2014
Posts: 224
    
    3

If you create each of your classes as panels [UserInputPanel, CheckBoxPanel, TotalsPanel](extending JPanel)... then you create a class as the frame [GUI](extending JFrame) and add the panels to it you'll end up with a nice modular design...

All that's left to do now is hook up the frame to a controller class that grabs the values in the UserInputPanel and the CheckBoxPanel and use the values to apply your formula that produces the results which flows back to the TotalsPanel for user feedback.

You can use the following snippets to get a better idea of the description:

UserInputPanel:-


CheckBoxPanel:-


TotalsPanel:-


Now I'll leave you to figure out how you're going to connect the dots and polish up the output in the following snapshot to meet your requirements


[Thumbnail for snapshot1.png]

M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

Rico, that is great. I have somewhere to start at least. Too bad most of this I do not understand. I am only 3 weeks into Java and some things are over me. I guess that your controller class is the main class. Not the main method, but where the math is done? when I added your code to the IDE some of the errors I do not understand, could you help me out with them?
Rico Felix
Ranch Hand

Joined: Mar 08, 2014
Posts: 224
    
    3

The frame and panels are just views that are used to retrieve information from the user, they contain no logic... There should be a specific class that contain the application logic... The controller is a class that is set up to collaborate with the views and the application's logic class... what this mean is that it gets information from the panels using the panel's interface which are the methods such as getKwhFieldText() and appliance1IsSelected(), etc... It then takes this retrieved information and passes it over the application logic class which decides what should be done based on whatever rules are in place... from there the application logic class passes back the calculated data to the controller class which updates the total panel using its interface which is the setDisplayText(String) method...

Note: The panels all extends JPanel and not JFrame... and add(Component) is a method inherited which requires you to wrap its argument between parentheses

And also I was just trying to show you how you can solve this:
M Gerber wrote:I am having problems getting that information from the user input class to the totals class


while trying to motivate you by showing you a proposed implementation... Please take the time and try to figure out a solution by using the posts as guidelines and not a copy and paste solution.
M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

You are quite correct, and Thank You again for your directions, I work a lot better hands on, especially with something like this. The controller class is the class that will have the setters and getters, and will also be the logic portion of the program right?

Example:


I am not trying to copy your code, but by typing it out and trying to add code to a working example I can see where I need to focus on,
I am new to Java and would like to learn it right, not just copy and paste.

Any help is appreciated.
M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29



while trying to motivate you by showing you a proposed implementation... Please take the time and try to figure out a solution by using the posts as guidelines and not a copy and paste solution.

If I can figure out how to fix it, I can figure out how to write it, that is all I am trying to do here. Sorry if it seems like I was scamming.
Winston Gutkowski
Bartender

Joined: Mar 17, 2011
Posts: 7492
    
  18

M Gerber wrote:If I can figure out how to fix it, I can figure out how to write it...

Actually, that's not quite true. A mechanic can know how to fix a car without necessarily knowing how to build one from scratch; and the same is true of programming. Rico's suggestion - nice as it is (and I've given him a cow for it) - is only one of many ways to do it, and it's good to understand why he did it, not just how; otherwise you may just end up doing things "someone else's way".

At this early stage it's probably not wildly important, but at some point you'll run into a problem that isn't covered by examples you've seen - and that's when "knowing why" becomes important.

HIH

Winston
M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

Thank you for your responses. What better way to learn code than to write it? I could read a book, I could post to forums, but what better way to learn code than to take examples and see why they work? If 2
+2=4 then in a simple code, total can = 2+2. I am a greenhorn and learning the basics can help to avoid easy mistakes.
Any help can and will be appreciated. Especially examples that I can use to learn Java.
Tony Docherty
Bartender

Joined: Aug 07, 2007
Posts: 2165
    
  47
Everyone is different and therefore the best way for one person to learn is not necessarily the best way for someone else to learn. Having said that I think it's fair to say that most people can only really learn to program by writing code, making mistakes, learning from them and then repeating the process time and time again. Reading other peoples code is an aid to learning for sure but reading and modifying someone else's code isn't really teaching you to program, to use Winston's analogy that just makes you a mechanic and not a car designer.
Rico Felix
Ranch Hand

Joined: Mar 08, 2014
Posts: 224
    
    3

Scanning through your current implementation there is one flaw in the code that I must point out... In the setter methods you should be validating the arguments passed in and not the class fields

This is a logical error:


Validate k instead of kwh (check all setter methods)

I also understand what you mean by having a place to start, but as the Bartenders said as they know better... your focus should be on actual coding instead of modifying code... The code you see should just be used as jump-starters to get your creative juices running...

To share with you a little secret of mine... I am a newbie to programming also and I use this site as a puzzle book to gather new problems which I try to solve to help train myself as well as attempt to provide help to the OP (My personal Java puzzle book )

My advice to you is try do be dynamic as the field is also dynamic... Do a lot of reading, coding and research in iteration and you should be able in due time to gather enough knowledge and techniques to become fluent in the art where it becomes an artless art growing out of the unconscious...

Thank you Winston for the cow
M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

Thank you for telling me how not to do it, but really all I want to know is how to do it not why not to. The mistakes that I am making I do not understand the underlying problems with it, and all I wanted to know is how something works so I can understand. I have taken my engine apart and learned how to change a head gasket by hands on following the repair manual and now I am confident that I can change different head gaskets because I did the one and have the knowledge from doing the first one. I am asking for help on my first Java program experience, and Rico has given me a direction to head. Now I am confused on some other problem and all you are telling me is how not to learn? Can I get some help from people that have possibly experienced the same problem or one related please?
M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29


thank you Rico I would have not seen that without you pointing that out.
M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

Sorry guys for my previous outburst, I am frustrated that I cannot grasp these concepts. Time is ticking and it is getting hard to get this done. I stare at this stupid monitor for hours and hours and still see red errors
Rico Felix
Ranch Hand

Joined: Mar 08, 2014
Posts: 224
    
    3

What are the errors that you're seeing?
M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

Wow there are a lot of errors.
I did start to use your example to add code to the program, but I am having trouble setting the action listeners. Do the event listeners method have to be in the gui interface class? Trying to empliment the listeners for the text area with the code:



but the code: text = kwh.getText();
I cnnot figure out how to call the other classes constructor to retrieve the info
M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

any way that I could email you the zipped code? I do not want to just put 300+ lines of code in the forums, or if that is ok then I will.
M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

I understand that the User input class panel is used to ask input from the user, The totals class panel will just regurgitate the data, a gui class will create a panel for the display of the other classes and the controller class will use setters and getters to store and retrieve the data, its just getting them all to work together that I have a problem figuring out.
Winston Gutkowski
Bartender

Joined: Mar 17, 2011
Posts: 7492
    
  18

M Gerber wrote:Sorry guys for my previous outburst, I am frustrated that I cannot grasp these concepts.

It's a common problem when you're starting out, so don't worry too much. We're used to it by now , but thanks for the apology.

I have to say though that this looks like a tough assignment for a "first Java program experience". Most courses wouldn't even think of introducing GUI material (except maybe message boxes) until at least a month or two into the fray, because (as I believe has already been said) GUI code is verbose, tricky and needs a lot of thought (and I still loathe it ).

The totals class panel will just regurgitate the data, a gui class will create a panel for the display of the other classes and the controller class will use setters and getters to store and retrieve the data, its just getting them all to work together that I have a problem figuring out.

And that's almost certainly because you're already trying to code them in your head before you have a clear idea of WHAT they need to do. It's a very difficult habit to break when you're starting out, because you're just dying to write code, but there are two major aspects to pretty much any programming problem: WHAT needs to happen, and HOW you're going to code it, and of the two 'what' is much more important than 'how' - especially in the early stages of writing a program.

Now this probably sounds like more nebulous advice that doesn't tackle your coding problem, but I suspect that the real issue is that you already have far too much code, so: StopCoding (←click).
As with anything in life, you can sometimes be too close to something; and that's the point when you have to stop and step back. Go play a game of squash, or have a couple of pints down the pub (if you're old enough), or just sleep on it. You'll be surprised how often answers come when you're not obsessing about a problem.

I've also written a page called WhereDoIStart, which shows you a technique for writing new classes that puts off a lot of these coding decisions until you're really ready to tackle them. If you've already written 300 lines, it may be too late for this program, but you might want to read it anyway ... or look at it before you start your next one.

Programming is about thinking, not coding; and you'll never solve a problem in Java until you can write it down in English (or your native language).

HIH

Winston
Rico Felix
Ranch Hand

Joined: Mar 08, 2014
Posts: 224
    
    3

Seeing that you are frustrated I will provide you with a link to the sources of knowledge for wiring everything together -> Home Auditing Calculator Source Code

Note:
The code just provides functionality and should be improved upon to handle parsing exceptions (NumberFormatException) and to be optimized for greater efficiency... (This you should attempt to do)
The GUI also needs to be improved as there is a bug where the totals panel disrupts the layout as its being updated... (This you should also attempt to do)

Also keep in mind that our mission is to help you learn and solve problems on your own through guidance and not to give you direct answers... It makes much more sense learning to fish and becoming a fisherman yourself than be given a fish all the time... for the fisherman that you are getting the fishes from will not always be around and other fishermen might not be as generous...
M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

Thank you Rico, I will use your gift and work on my understanding of Java. I am in the MIS course for the University of Phoenix and the current classes that I am in run for 6 weeks. UoP jumps around a lot in their studies and the last time that I had to study Java for UoP was 2 years ago. I am very appreciative for all the help that you guys have given me here on the Moose Ranch, I have tried StackOverflow and they were not as helpful.

UoP is a good school, but the classes assume that you know more than they have given. I know that we are supposed to study on our off time and expand our horizons, but there is only so many hours in the day.
Rico Felix
Ranch Hand

Joined: Mar 08, 2014
Posts: 224
    
    3

I understand and no problem pal...

I usually work out problems in my head without thinking to much so there will be stuff in there that needs refining... also you will have to hook up the check-boxes and provide your logic to the Application class as I didn't
M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

In my limited knowledge, I understand little of this, but I am working on it, one question though, you have an array here:


and numbers here:


Is the array for the different panels/classes?
I am trying to add the checkboxes to the totals area and then the math for the washer (add gallon usage and price only if washer is selected), but this is outside of my UoP reading. Where can I look for help?

M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

Sorry tried to make the object of my questions green, did not work.
Rico Felix
Ranch Hand

Joined: Mar 08, 2014
Posts: 224
    
    3

I've tried to make the classes as cohesive as possible...

The GUI class was made just to supply the view adding the panels to it for user input and feedback...

The Application class was made to contain the logic for the application...

The Controller class was made to connect the both together by setting up a channel for them to communicate with each other (the view and the logic classes)... In order to achieve this the GUI class gives the Controller class access to each of its panel components by packaging them into an array of their Parent type JPanel and delivering it by using the getPanels() method, hence the reason for the array notation after the method call and the cast back to its original type (UserInputPanel userInputPanel = (UserInputPanel) gui.getPanels()[0];)... Now using this reference userInputPanel we have access to each component on the panel itself and we use it to get each field to add the appropriate action listener... they are numbered 1, 3, 5 according to how they were added to the panel in accordance to this method getComponent(int)...

You can probably follow the same pattern to connect the check-boxes if you like...

While building GUI applications you can look for help from the API Documentation and the Java Tutorials
Rico Felix
Ranch Hand

Joined: Mar 08, 2014
Posts: 224
    
    3

I've updated the source code to incorporate the check-boxes event handlers and improved the GUI (can be downloaded at the same link) all for free ... Now all that's left for you to do is to apply your business logic

Check out the demo:
M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

WOW dude that was awesome (at least from my chair). Thank you for your demonstration on how Java is supposed to work. I know that there are different ways to do similar things, but I have been working with Java for 5 weeks. Thanks for pointing me in a direction... Id give you a ton of cows if i could...
Rico Felix
Ranch Hand

Joined: Mar 08, 2014
Posts: 224
    
    3

I have hope that you will dig around and understand the design approach that I've made and come up with a much improved implementation for the application which you can probably share so that I can learn new things also from your side of the spectrum
M Gerber
Greenhorn

Joined: Jul 18, 2012
Posts: 29

I will give it my best shot with 4 week training :-)
most of the things in you code I do not understand yet, but I am learning.
stevey green
Greenhorn

Joined: Nov 24, 2013
Posts: 6
I've not read a lot of this thread, but what comes to mind straight away is... bad design.

All data should be separated from your GUI - if I was you I would be taking a look at some design patterns - MVC in particular,
a pattern which is used to separate application's concerns.

Regards,
Steve


If they say it can't be done, then it can.
Rico Felix
Ranch Hand

Joined: Mar 08, 2014
Posts: 224
    
    3

stevey green wrote:I've not read a lot of this thread, but what comes to mind straight away is... bad design.

All data should be separated from your GUI - if I was you I would be taking a look at some design patterns - MVC in particular,
a pattern which is used to separate application's concerns.

Regards,
Steve


I've always wanted to learn the MVC pattern but never got the time to do the reading... My design was actually done through intuition on what I suppose MVC is suppose to be... guess I should actually learn how its formally implemented

Thanks Stevey for the motivation
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: retrieving variables from another class
 
Similar Threads
JSplitterView treats panes differently
How do i get one value from a JTextField to show in another classes JTextfield
Help designing a GUI
Parent and Child JDialogs
JFrame/JPanel problem