Need help with JComponent class
Hi,
I'm trying to create a class that has all the characteristics of several GUI components such as JButton, JLabel, JRadioButton .... combined into one big class. But when I run the codes, the object of this new class is not visible on a frame like a JButton or a JLabel would be. Someone, please give me some hints. Thanks.
The ButtonWrapper class extends JButton and the CheckBoxWrapper class extends JCheckBox and they both work without any problems. The GuiWrapper class (listed below) is the class that has the visibility problem when added to a container of a frame.
import java.awt.*;
import javax.swing.*;
public class GuiWrapper extends JComponent{
public GuiWrapper(String ptype, String p2, String p3) {
if(ptype.toLowerCase() == "button"){
ButtonWrapper b = new ButtonWrapper(p2, p3);
if(ptype.toLowerCase() == "checkbox"){
CheckBoxWrapper c = new CheckBoxWrapper(p2, p3);
}
Okay, so, for starters, I think this is a Really Bad Idea. If your developers can't handle using the API/tutorial to learn how the components work, your project will fail. This UberClass will not help in the long run. It will also almost certainly turn into a maintainence nightmare for you.
Of course, since you're going to do it anyway... I suspect your issue lies with paintComponent. If I recall correctly, paintComponent doesn't render anything by default for a JComponent. You'll need to override paintComponent and have it invoke the renderer for the relevant child component.
Similar Messages
-
Need Help with new Classes / methods
Hi, I need to create a class called Proposition. It include a Proposition object with 3 variables
Name, Description, Value
This is the constructor I wrote:
private String name;
private String description;
private boolean value;
public Proposition(){
name = "name";
description = "description";
value = false;
}Now I need a method that give values to the 3 variables in the proposition object:
public Proposition setProp(String line){
StringTokenizer ST1 = new StringTokenizer(line, ".");
String ValidLine = ST1.nextToken()+".";
StringTokenizer ST2 = new StringTokenizer(ValidLine, "=");
name = CutSpace(ST2.nextToken());
description = (ST2.nextToken()).trim();
value = false;
return name;
return description;
return value;
}An example of String line is: v = we are in Vancouver.
When I run the program, I got error message with the 3 return statements saying found String/Boolean while Proposition is needed. I'm not quite sure how to write the return statements. Can any1 help?
Thx!Your setProp() method should not be returning anything. After all it is setting not getting. So just declare it as
public void setProp(String line){and remove the return statements. -
Need help with a Class.
Ok hey guys i got A project for school and i need help. I asked my teacher and he num so yea. here it is
this is my blog class
/* Project Name: .java
Name:
Class: Programing 2 #0047-02 Pds 5&6
Variable List:
Info:
import java.util.Scanner;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class blog
String date2;
String user;
String Entry;
public void GetInfo(String Iuser,String IEntry)
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
date2 = dateFormat.format(date);
user = Iuser;
Entry = IEntry:
public void ShowInfo()
System.out.println(date2 + " " + user + " Said: " + Entry);
}This is my test class
/* Project Name: .java
Name: Josh
Class: Programing 2 #0047-02 Pds 5&6
Variable List:
Info:
import java.util.Scanner;
public class test
String user;
String Entry;
public static void main (String[] args)
{ System.out.println("Welcome Please Eneter UserName");
Scanner kb = new Scanner(System.in);
user = kb.next();
System.out.println("Please Enter Your Entry");
Entry = kb.next();
blog info = new blog();
blog.GetInfo(user,Entry);
blog.ShowInfo();
}So what is sopost to do in the test it ask user to import user name and entery. It send it to blog Class, then it send it out. Here is my errors
G:\VOC T2\Java\Chap4\test.java:21: non-static variable user cannot be referenced from a static context
user = kb.next();
^
G:\VOC T2\Java\Chap4\test.java:25: non-static variable Entry cannot be referenced from a static context
Entry = kb.next();
^
G:\VOC T2\Java\Chap4\test.java:29: non-static variable user cannot be referenced from a static context
blog.GetInfo(user,Entry);
^
G:\VOC T2\Java\Chap4\test.java:29: non-static variable Entry cannot be referenced from a static context
blog.GetInfo(user,Entry);
^
G:\VOC T2\Java\Chap4\test.java:29: GetInfo(java.lang.String,java.lang.String,java.lang.String) in blog cannot be applied to (java.lang.String,java.lang.String)
blog.GetInfo(user,Entry);
^
G:\VOC T2\Java\Chap4\test.java:31: non-static method ShowInfo() cannot be referenced from a static context
blog.ShowInfo();
^
6 errors
Tool completed with exit code 1 Plez help-- "non-static X cannot be referenced from a static context" --
You get this error because static members don't require an instance of the object to be accessed; they belong to the class. But a non-static member belongs to an instance (an individual object). There's no way for the static method to know which instance's variable to use or method to call, and thus, the compiler happily tells you that you can't access an instance member (non-static) from a class context (static).
[The Java? Tutorial - Understanding Instance and Class Members|http://java.sun.com/docs/books/tutorial/java/javaOO/classvars.html]
~ -
Need help with a class project
I'm new to Java and I'm having problems converting a small program to be more functional. Here is my original codeimport java.util.Arrays;
public class Product
// initialize arrays
private int cdNums[] = { 0,0,0,0 };
private String cdNames[] = { "null", "null", "null", "null" };
private int cdUnits[] = { 0,0,0,0 };
private double cdValue[] = { 0.0, 0.0, 0.0, 0.0 };
private double inventoryValue[] = { 0.0, 0.0, 0.0, 0.0 };
// initialize instance variable
private double totalValue = 0;
private int count;
public Product( int invNumber[], String albumName[], int invUnits[], double invValue[] )
cdNums = invNumber; // store inventory number
cdNames = albumName; //store album name
cdUnits = invUnits; //store number of units
cdValue = invValue; // store unit price
public double calcInventoryValue()
// calculate Inventory value
for ( int count = 0; count < cdNums.length; count++ )
totalValue =0; // initialize totalValue
totalValue =( cdUnits[ count ] * cdValue [ count ] );
System.out.printf( "%s%d%s%s%s%d%s%.2f%s%.2f\n", "Item #", cdNums[ count ], " is: ", cdNames[ count ], " with ", cdUnits [ count ], " units priced at $", cdValue [ count ], " gives value of $", totalValue );
return totalValue;
} // end calcinventoryValue method
} // end classand the test application: import java.util.Arrays;
public class ProductTest
public static void main( String args[] )
int invNumber [] = { 1,2,3,4 };
String albumName[] = { "Wish You Were Here", "Abacab", "Animals", "Security" };
int invUnits[] = { 200, 150, 50, 500 };
double invValue[] = { 14.99, 9.99, 23.49, 12.99 };
Product myProduct = new Product (invNumber, albumName, invUnits, invValue );
myProduct.calcInventoryValue();
} // end main
} // end class ProductTestWhat I want to do is convert it to read in user input instead of static lists. Here is what I have so far:
import java.util.Arrays;
public class Product
// initialize arrays
private int cdNums[];
private String cdNames[];
private int cdUnits[];
private double cdValue[];
private double inventoryValue[];
// initialize instance variable
private double runValue = 0;
private double totalValue = 0;
private int count;
public Product( int invNumber[], String albumName[], int invUnits[], double invValue[] )
cdNums = invNumber; // store inventory number
cdNames = albumName; //store album name
cdUnits = invUnits; //store number of units
cdValue = invValue; // store unit price
public double calcInventoryValue()
// calculate Inventory value
totalValue = 0; // Initialize totalValue variable
for ( int count = 0; count < cdNums.length; count++ )
runValue =0; // initialize runValue
runValue =( cdUnits[ count ] * cdValue [ count ] );
System.out.printf( "%s%d%s%s%s%d%s%.2f%s%.2f\n", "Item #", cdNums[ count ], " is: ", cdNames[ count ], " with ", cdUnits [ count ], " units priced at $", cdValue [ count ], " gives value of $", runValue );
totalValue = totalValue += runValue;
calcTotalValue( totalValue );
return totalValue;
} // end calcinventoryValue method
public double calcTotalValue( double totalValue )
System.out.printf( "%s%.2f\n", "The total value of the inventory is: $", totalValue );
return totalValue;
} // end calcTotalValue method
} // end classand the new test application:
import java.util.Arrays;
import java.util.Scanner;
public class ProductTest
public static void main( String args[] )
double totalValue = 0;
do
{ // open dowhile
int count = 0; // initialize counter
Scanner input = new Scanner( System.in ); // call scanner to get input
for ( int count = 0; count > 0; count++ )
{ // open for loop
System.out.printf ( "%s%d%s\n", "Please enter the inventory # of Item ", count, " or 0 to quit: " ); // prompt for inventory number or sentinel value
int invNumber[ count ] = input.nextInt(); // get user input of Item Number
if ( invNumber[ count ] != 0 ) // check for sentinel
{ // open if
System.out.printf ( "%s%d\n","Please enter the album name of Item #", invNumber[ count ] ); // prompt for album name
String albumName[ count ] = input.nextLine(); // get input album name
System.out.printf ( "%s%d\n", "Please enter the number of units in stock for Item #", invNumber[ count ] ); // prompt for number of units in stock
int invUnits[ count ] = input.nextint(); // input rate of payment
System.out.printf ( "%s%.2f\n", "Please enter the unit price for Item #", invNumber[ count ] ); // prompt for unit price
double unitValue = input.nextDouble(); // input rate of payment
System.out.println(); // print blank line for readability
} // close if
else
{ // open else
Product myProduct = new Product (invNumber, albumName, invUnits, invValue );
myProduct.calcInventoryValue();
} // close else
} // close for loop
} while ( invNumber != 0 ); // loop back to inputting employee name and close dowhile
} // end main
} // end class ProductTestthe compiler is telling me for ProductTest that it is expecting "]" for the following line: int invNumber[ count ] = input.nextInt();Do I need to store the data in a variable first and then feed it into the array? What do I need to do to complete this code?OK, yeah. Change the Product constructor so that it takes scalar values (as opposed to arrays) -- a single int for units in stock, and single String for name, etc.
Then you can create multiple objects of that class, one for each CD or whatever.
It makes sense to hardcode values in the ProductTest class, but not really in the Product class. Your ProductTest class is almost there. You know how in the main method you create a single Product object with those arrays? Change it so that you have a loop. Loop through the prices, album names, etc., and create a Product for each set of values. Then put the Product objects in an array, or better yet (and if you've covered it in class) into a Collection like a java.util.HashSet or a java.util.ArrayList.
You said you wanted to make it take values from user input, rather than hardcoded lists. Once you've made the above change, move on to doing that. You can read user input with a java.util.Scanner. Or you can use a java.io.BufferedReader. Did the prof say to use one particular method or another? -
Need help with Runtime class in UNIX
I am attempting to kick off a C++ executable from within java. This class is called through a UI.
The executable runs in the form of the exec followed by name=value pairs, ie [path/exec] [n=v] [n=v] ... and runs fine from the command line.
Examples: These don't kick it off, but don't error either.
String cmd[] = {"/bin/sh","-c","[path]/[exec] [n=v]};
String cmd[] = new String[3];
cmd[0] = "[path]/[exec]";
cmd[1] = "[n=v]";
cmd[2] = "[n=v]";
Process p = Runtime.getRuntime().exec(cmd);
I'm thinking it may be an environment issue, ie env vars not set because the only way I can get this to work is to put the command in a shell script that sets the env vars and kicks off the executable. Like:
String cmd[] = {"/bin/sh","-c","/[path]/test.sh"};
I'd prefer to kick this off from the java code. It sounds like I need to find a way to shell out, run our script to set env vars, then kick off the exec. This is my first attempt w/ using Runtime, so maybe I'm missing something.
Thanks in advance for the help.I think this sort of thing will depend upon the shell you're in. When you use Runtime.exec you (might) lose your "parent" shell's environment variables - this question shows up here now and again, here's one thread that might help:
http://forum.java.sun.com/thread.jspa?threadID=468648&messageID=2172572
You might find some enlightenment on Roedy's Java Glossary here: http://mindprod.com/jgloss/exec.html
Hope that helped
Lee -
Need help with generic class with comparable type
Hi. I'm at University, and I have some coursework to do on writing a generic class which offers ordered binary trees of items which implement the comparable interface.
I cant get the code to compile which I have written.
I get the error: OBTComparable.java uses unchecked or unsafe operations
this is the more detailed information of the error when I compile with -Xlint:unchecked
OBTComparable.java:62: warning: [unchecked] unchecked call to insert(OBTType) as
a member of the raw type OBTComparable
left.insert(insertValue);
^
OBTComparable.java:64: warning: [unchecked] unchecked call to insert(OBTType) as
a member of the raw type OBTComparable
right.insert(insertValue);
^
OBTComparable.java:75: warning: [unchecked] unchecked call to find(OBTType) as a
member of the raw type OBTComparable
return left.find(findValue);
^
OBTComparable.java:77: warning: [unchecked] unchecked call to find(OBTType) as a
member of the raw type OBTComparable
return right.find(findValue);
^
and here is my code for the class
public class OBTComparable<OBTType extends Comparable<OBTType>>
// A tree is either empty or not
private boolean empty;
// If the tree is not empty then it has
// a value, a left and a right.
// These are not used it empty == true
private OBTType value;
private OBTComparable left;
private OBTComparable right;
// Create an empty tree.
public OBTComparable()
setEmpty();
} // OBTComparable
// Make this tree into an empty tree.
private void setEmpty()
empty = true;
value = null; // arbitrary
left = null;
right = null;
} // setEmpty
// See if this is an empty (Sub)tree.
public boolean isEmpty()
{ return empty; }
// Get the value which is here.
public OBTType getValue()
{ return value; }
// Get the left sub-tree.
public OBTComparable getLeft()
{ return left; }
// Get the right sub-tree.
public OBTComparable getRight()
{ return right; }
// Store a value at this position in the tree.
private void setValue(OBTType requiredValue)
if (empty)
empty = false;
left = new OBTComparable<OBTType>(); // Makes a new empty tree.
right = new OBTComparable<OBTType>(); // Makes a new empty tree.
} // if
value = requiredValue;
} // setValue
// Insert a value, allowing multiple instances.
public void insert(OBTType insertValue)
if (empty)
setValue(insertValue);
else if (insertValue.compareTo(value) < 0)
left.insert(insertValue);
else
right.insert(insertValue);
} // insert
// Find a value
public boolean find(OBTType findValue)
if (empty)
return false;
else if (findValue.equals(value))
return true;
else if (findValue.compareTo(value) < 0)
return left.find(findValue);
else
return right.find(findValue);
} // find
} // OBTComparableI am unsure how to check the types of OBTType I am comparing, I know this is the error. It is the insert method and the find method that are causing it not to compile, as they require comparing one value to another. How to I put the check in the program to see if these two are of the same type so they can be compared?
If anyone can help me with my problem that would be great!
Sorry for the long post, I just wanted to put in all the information I know to make it easier for people to answer.
Thanks in advance
DavidI have good news and undecided news.
First the good news. Your code has compiled. Those are warnings not errors. A warning is the compiler's way of saying "I understand what you are asking but maybe you didn't fully think through the consequences and I just thought I would let you know that...[something] "
In this case it's warning you that you aren't using generics. But like I said this isn't stopping it from compiling.
The undecided news is the complier is warning you about not using generics. Are you supposed to use generics for this assignment. My gut says no and if that's true then you have no problem. If you are supposed to use generics well then you have some more work. -
I am writing a class that does the following:
Uses JComboBoxes so that the user can select Day, Month, and Year. I have the months set up January through December. When I choose a month, I wrote a subclass that gets the chosen month and enters the correct number of days in the Day ComboBox.
Here is some sample code:
// This code is in the main class
monthList.addActionListener(new SelectedMonth());
// This code is in the SelectedMonth subclass
selected = monthList.getSelectedIndex();
switch(selected) {
case 0: // for January
dayList.removeAllItems();
g.set(Calendar.MONTH, selected);
max = g.getActualMaximum(Calendar.DAY_OF_MONTH);
for(int i = 1; i <= max; i++) {
dayList.addItem(new Integer(i));
This code is repeated for Cases 1 through 11 to cover the other months.
After Day, Month, and Year are selected, I click an OK button and then want to send the chosen Day, Month, and Year to a database. So, I have another subclass which uses ActionListener and gets the data from the Month, Day, and Year ComboBoxes.
However, I get runtime errors when retrieving the chosen Day using the following command:
String fromDay = (String)dayList.getSelectedItem();
Because the Days were put put into the Day JComboBox in a subclass, this doesn't want to work.
Does anybody have a solution? Any help would be greatly appreciated.
If you would like to look at all of my code, leave your e-mail address and I'll let you have a look.Hi,
i got solution for ur problem, here u copy the following code and paste in some editor and try to run to see the results.
import java.io.*;
import java.awt.*;
import java.util.Calendar;
import java.awt.event.*;
import javax.swing.*;
public class CalExample extends JFrame
private String months[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
private JComboBox monthList=new JComboBox(months);
private JComboBox dayList=new JComboBox();
private JButton button=new JButton();
private int selectedMonth=1;
private int selectedDay=1;
public static void main(String[] args)
CalExample pe=new CalExample();
public CalExample()
JPanel panel=new JPanel();
panel.setBackground(Color.blue);
panel.setLayout(null);
// Month Combo Box related init Stuff
monthList.setBounds(100,30,100,20);
monthList.setBackground(Color.white);
// Day Combo Box related init Stuff
dayList.setBounds(220,30,100,20);
dayList.setBackground(Color.white);
// Output textbox init stuff
button.setBounds(340,30,100,20);
button.setText(" Click Me ");
panel.add(monthList);
panel.add(dayList);
panel.add(button);
getContentPane().add(panel);
setSize(500,300);
setVisible(true);
// Adding Listeners
monthList.addActionListener
new ActionListener()
public void actionPerformed(ActionEvent ae)
selectedMonth=monthList.getSelectedIndex();
showDays(selectedMonth);
button.addActionListener
new ActionListener()
public void actionPerformed(ActionEvent ae)
selectedDay=dayList.getSelectedIndex();
JOptionPane.showMessageDialog(null,"You Selected Month : "+(months[selectedMonth])+",--> Day : "+(selectedDay+1));
addWindowListener(new WindowAdapter()
public void windowClosing(WindowEvent we)
System.out.println( " Exiting ...");
System.exit(0);
fillCurrentDate();
public void showDays(int selectedMonth)
Calendar cal=Calendar.getInstance();
cal.set(Calendar.MONTH,selectedMonth);
int maxDays=cal.getActualMaximum(Calendar.DAY_OF_MONTH);
dayList.removeAllItems();
for(int i=1;i<=maxDays;i++)
dayList.addItem(String.valueOf(i));
public void fillCurrentDate()
Calendar cal=Calendar.getInstance();
showDays(cal.get (Calendar.DAY_OF_MONTH));
HAPPY CODING...
regards
Bandi
mail : [email protected], [email protected]
****************** Think Green, Save Green *************************** -
for the moment ihave to create a program that will add accountants to contracts.
now from within contract i want to be able to be able to create a contract and then have a method to add an accountant to the contract...could u look at my contract class and c what im doing wrong please and also u can only have one accountant on each contract
im getting error....cannot find symbol Accountant(Accountant)
public class Contract
// instance variables - replace the example below with your own
private Accountant anAccountant;
//the number of days
private double duration;
private double rateOfContract;
private static final double vat= 0.21;
private boolean complete;
private String type;
private boolean occupied;
* Constructor for objects of class Contract
public Contract(double duration, String type )//Accountant anAccountant, double duration)
//this.anAccountant = anAccountant;
this.duration = duration;
rateOfContract = 0 ;
complete = false;
this.type = type;
occupied = false;
* a method to get the accountant
public Accountant getAccountant()
return anAccountant;
* a method to get the rate of the contract
public double getRateOfContract()
return rateOfContract;
* a method to check if the contract is complete
public boolean getComplete()
return complete;
* a method to set if the contract to complete
public void isComplete()
complete = true ;
* add an accountant to the contract if his expertise matches
* the type of contract
public void addAccountant(Accountant anAccountant)
if(anAccountant.getExpertise().equals(type))
if(occupied = false)
//add the accountant to the contract
anAccountant = Accountant(anAccountant);
System.out.println("an accountant has been added to the contract");
rateOfContract = anAccountant.getDailyRate() * duration;
occupied = true;
}else{
}else{
* a method to check accupied
public boolean getOccupied()
return occupied;
}Message was edited by:
mollemanyes off course i have `and i also have a controller class called firm...but i just want the accountant to be added to the contract....and i just cant do it
public class Accountant
// instance variables
protected String name;
protected String expertise;
protected double dailyRate;
protected boolean isActive;
* Constructor for objects of class Accountant
public Accountant(String name, String expertise, double dailyRate)
this.name = name;
this.expertise = expertise;
this.dailyRate = dailyRate;
isActive = false;
* a method to get the accountants name name
public String getName()
return name;
* a metohd to get the acvccontats expertise
public String getExpertise()
return expertise;
* a method to get the accountants daily rate
public double getDailyRate()
return dailyRate;
* a method to check if the accountant is active
public boolean getIsActive()
return isActive;
* a method to set the accountant to active or not
public void setIsActive(boolean active)
active = isActive;
} -
Please need help with Inner Classes
Hi! I have the following inner class, but it is not an "explicit" inner class:
import java.util.*;
public class EXTERIOR_NOEXPLICITA {
private Vector i;
public void llena_Vector(int a){
i = new Vector();
for(int z=0;z<=a;z++)
i.addElement(""+z);
public Enumeration test() {
return new Enumeration(){
int item = i.size()-1;
public boolean hasMoreElements(){
return(item >= 0);
public Object nextElement(){
if(!hasMoreElements())
throw new NoSuchElementException();
else
return i.elementAt(item--);
My question is, how can I put it in an explicyt inner class?
Plese help me! =)
RaulI am not entirely sure what you mean by explicit inner class. If you mean converting your anonymous class into a nested class, then it is quite easy:
import java.util.*;
public class EXTERIOR_NOEXPLICITA {
private Vector i;
public void llena_Vector(int a) {
i = new Vector();
for (int z = 0; z <= a; z++)
i.addElement("" + z);
private final class MyEnumeration implements Enumeration {
int item = i.size() - 1;
public boolean hasMoreElements() {
return (item >= 0);
public Object nextElement() {
if (!hasMoreElements())
throw new NoSuchElementException();
else
return i.elementAt(item--);
public Enumeration test() {
return new MyEnumeration(); -
Need help with a class file!
How do you decompress or decompile a class file??? I just can't seem to get it...
One program is called JAD...
Also the jedit program has a plugin to decompile class files.
http://www.jedit.org
Uwe -
Need help in Creating classes for my assignment
Hi ,
I just started learning Java and have the following requirement
1) Create the following classes/interfaces using descriptions:
a) Account � data members : id:String, type:String, balance:BigDecimal, methods : Account, Account with String parameter, getId, getType, getBalance, setId, setType, setBalance, deposit, withdraw, compareTo, toString
b) Bank � data members: instance:Bank, accountsMap:Map, customersMap:Map, customersAccount:Map, transactionMap:Map, methods: getAccountsMap, getCustormersMap, getCustomersAccounts, getTransactionMap, associate, addTransaction, getAccount, getCustomer, getAccounts, getTransactions, deposit, withdraw, transfer
c) AccountDoesNotExistException, BankException, CustomerDoesNotExistException, InsufficientFundsException, InvalidAmountException, ZeroAmountException
2) Create the util package using the following class
a) AmountConverter � methods: fromDecimal(BigDecim al), fromString(String)
In 1 b how to Create Instance:bank in the class .Also how to do part2.If possible can you help me with all the parts.Based on these I've some more to do.Here is what I've come with
ACCOUNT.JAVA
import java.math.*;
public class Account {
private String Id;
private String Type;
private BigDecimal balance;
public Account( ) {
public Account(String Id,String Type,BigInteger balance) {
this.Id = Id;
this.Type = Type;
this.balance = balance;
public String getId( ) {
return Id;
public void setId(String Id) {
this.Id = Id;
public String getType( ) {
return Type;
public void setType(String Title) {
this.Title = Type;
public String getBalance( ) {
return id;
public void setBalance(String balance) {
this.balance = balance;
public String withdraw( ) {
public String deposit( ) {
public void setLastName(String LastName) {
this.id = id;
CUSTOMER.JAVA
public class Customer {
private String Id;
private String Title;
private String firstName;
private String lastName;
/** Construct a Customer with no data -- must be a no-argument */
public Customer( ) {
/** Construct a Customer with String Parameter */
public Customer(String Id,String Title,String firstName,String lastName) {
this.Id = Id;
this.Title = Title;
this.firstName = firstName;
this.lastName = lastName;
/** Return the Id. */
public String getId( ) {
return Id;
/** Set the Id */
public void setId(String Id) {
this.Id = Id;
/** Return the Title */
public String getTitle( ) {
return Title;
/** Set the Title */
public void setTitle(String Title) {
this.Title = Title;
/** Return the Firstname. */
public String getFirstName( ) {
return id;
/** Set the Firstname. */
public void setFirstName(String FirstName) {
this.id = id;
/** Return the Lastname. */
public String getLastName( ) {
return LastName;
/** Set the Lastname. */
public void setLastName(String LastName) {
this.id = id;
TRANSRECORD.JAVA
import java.util.*;
import java.math.*;
public class TransRecord implements Comparable{
private Date timeStamp;
private String transType;
private BigDecimal transAmt;
/** Construct a Trans Record with no data -- must be a no-argument */
public TransRecord( ) {
/** Construct a Customer with String Parameter */
public Customer(String transType,String transAmt) {
this.transType = transType;
this.transAmt = transAmt;
/** Return the timeStamp. */
public String gettimeStamp( ) {
return timeStamp;
/** Set the timeStamp */
public void settimeStamp(Date timeStamp) {
this.timeStamp = timeStamp;
/** Return the TransType */
public String getTransType( ) {
return TransType;
/** Set the TransType */
public void setTransType(String TransType) {
this.TransType = TransType;
/** Return the TransAmt */
public String getTransAmt( ) {
return TransAmt;
/** Set the TransAmt */
public void setTransAmt(String TransAmt) {
this.TransAmt = TransAmt;
/** Return a String representation. */
public String toString( ) {
/** CompareTo method */
public int compareTo(Object argument)
===============
ACCOUNTDOESNOTEXISTEXCEPTION.JAVA
public class AccountDoesNotExistException
extends Exception
public AccountDoesNotExistException()
super();
public AccountDoesNotExistException(String message)
super(message);
=================
BANKEXCEPTION.JAVA
public class BankException
extends Exception
public BankException()
super();
public BankException(String message)
super(message);
CUSTOMERDOESNOTEXISTEXCEPTION.JAVA
public class CustomerDoesNotExistException
extends Exception
public CustomerDoesNotExistException()
super();
public CustomerDoesNotExistException(String message)
super(message);
ACCOUNTDOESNOTEXISTEXCEPTION.JAVA
public class AccountDoesNotExistException
extends Exception
public AccountDoesNotExistException()
super();
public AccountDoesNotExistException(String message)
super(message);
INSUFFICIENTFUNDSEXCEPTION.JAVA
public class InsufficientFundsException
extends Exception
public InsufficientFundsException()
super();
public InsufficientFundsException(String message)
super(message);
INVALIDAMOUNTEXCEPTION.JAVA
public class InvalidAmountException
extends Exception
public InvalidAmountException()
super();
public InvalidAmountException(String message)
super(message);
ZEROAMOUNTEXCEPTION.JAVA
public class ZeroAmountException
extends Exception
public ZeroAmountException()
super();
public ZeroAmountException(String message)
super(message);
I need help with Bank Class and the util class.Correct me If I've missed any exceptions or if any syntax is wrong
THanks
AKsh -
I''ve just started out with Java and I need help with my latest program.
The program looks someting like this:
public class MultiServer {
public static void main(Straing[] args) {
ServerGUI GUI = new ServerGUI();
public class ServerGUI extends JFrame implements ActionListener {
private TextArea textArea;
public ServerGUI() {
//setting up the JFrame and stuff like that
public void actionPerformed(ActionEvent event) {
if(button == addButton) {
addGUI add = new addGUI();
public class addGUI extends JFrame implements ActionListener {
private TextField t1 = new TextField(25);
public addGUI() {
//setting up the JFrame and stuff like that
public void actionPerformed(ActionEvent event) {
if(button == printButton) {
textArea.append("THIS DOES NOT WORK!");
} The problem is as follows: I want to be able to write text in the textArea in class ServerGUI from the class addGUI, but I can't. I hope you understand what I mean.
How is this fixed? Please help me!public void actionPerformed(ActionEvent event) {
if(button == addButton) {
addGUI add = new addGUI(textArea);
public class addGUI extends JFrame implements ActionListener {
private TextArea textArea;
public addGUI(TextArea textArea) {
this.textArea = textArea;
}/Kaj -
Hi, I'm not sure if I'm allowed to post questions on this forum but I can't find anywhere to talk to helpful people about programming.
I'm making a dnd interface for JComponents. So far I've made a simple program that has a Component that can be lifted from a container and braught to the glass pane then later moved to anywhere on the screen and dropped into the container below it. Here's where my problems come:
1) Rite now my 'Movable Component' is a JPanel which is just colored in. I want to either take a Graphic2d from a JComponent/Component and draw it on the JPanel or change the JPanel to the component I want to paint and disable the component.
The problem with getting the Graphics2d is that if the component isn't on the screen it doesn't make a graphic object. I tried messing with the ui delicate and overriding parental methods for paintComponent, repaint, and that repaintChildren(forget name) but I haven't had luck getting a good graphics object. I was thinking of, at the beginning of running the program, putting 1 of each component onto the screen for a second then removing it but I'd rather not. I'd also like to change the graphics dynamicly if someone stretches the component there dropping and what not.
The problem with disabling is that it changes some of the visual features of Components. I want to be able to update the Component myself to change how it looks and I don't want disabling to gray out components.
I mainly just dont want the components to do any of there normal fuctions. This is for a page builder, by the way.
Another problem I'm having is that mouseMotionListener is allowing me to select 2 components that are on top of one another when there edges are near each other. I don't know if theres a fix to this other than changing the Java Class.
My next problem is a drop layout manager, but I'm doing pretty good with that rite now. It'll problem just move components out of the way of the falling component.
One last thing I need help with is that I don't want the object that's being carried to go across the menu bar and certain areas. When I'm having the object being carried I have it braught up to the glass pane which allows it to move anywhere. Does anyone have any idea how I could prevent the component from being over the menu bars and other objects? I might have to make 1 panel is the movable area that can then be broken down into the 'component bank', 'building page' and whatever else I'm gonna need.
This is all just test code to get together for when I make the real program but I need to make sure it'll be possible without a lot of hacking of code.
Sorry for the length. Thanks for any help you can give.The trick to making viewable components that have no behaviour, is to render them onto an image of some sort (eg a BufferedImage). You can then display the Image on a JLabel that can be dragged around the desktop.
Here is a piece of code that does the component rendering for you. This particular example uses a fixed component size, but you can modify that as you choose of course...public class JComponentImage
private static GraphicsConfiguration gConfig;
private static Dimension compSize = new Dimension(80, 22);
private static Image image = null;
public static Image getImage(Class objectClass)
if (gConfig == null)
GraphicsEnvironment gEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gDevice = gEnv.getDefaultScreenDevice();
gConfig = gDevice.getDefaultConfiguration();
image = gConfig.createCompatibleImage(compSize.width, compSize.height);
JComponent jc = (JComponent) ObjectFactory.instantiate(objectClass);
jc.setSize(compSize);
Graphics g = image.getGraphics();
g.setColor(Color.LIGHT_GRAY);
g.fillRect(0, 0, compSize.width, compSize.height);
g.setColor(Color.BLACK);
jc.paint(g);
return image;
}And here is the class that makes the dragable JLabel using the class above...public class Dragable extends JLabel
private static DragSource dragSource = DragSource.getDefaultDragSource();
private static DragGestureListener dgl = new DragMoveGestureListener();
private static TransferHandler th = new ObjectTransferHandler();
private Class compClass;
private Image image;
Dragable(Class compClass)
this.compClass = compClass;
image = JComponentImage.getImage(compClass);
setIcon(new ImageIcon(image));
setTransferHandler(th);
dragSource.createDefaultDragGestureRecognizer(this,
DnDConstants.ACTION_COPY,
dgl);
public Class getCompClass()
return compClass;
}Oh and here is ObjectFactory which simply instantiates Objects of a given class and sets their text to their classname (very crudely)...public class ObjectFactory
public static Object instantiate(Class objectClass)
Object o = null;
try
o = objectClass.newInstance();
catch (Exception e)
System.out.println("ObjectFactory#instantiate: " + e);
String name = objectClass.getName();
int lastDot = name.lastIndexOf('.');
name = name.substring(lastDot + 1);
if (o instanceof JLabel)
((JLabel)o).setText(name);
if (o instanceof JButton)
((JButton)o).setText(name);
if (o instanceof JTextComponent)
((JTextComponent)o).setText(name);
return o;
}Two more classes required by this codepublic class ObjectTransferHandler extends TransferHandler {
private static DataFlavor df;
* Constructor for ObjectTransferHandler.
public ObjectTransferHandler() {
super();
try {
df = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType);
} catch (ClassNotFoundException e) {
Debug.trace(e.toString());
public Transferable createTransferable(JComponent jC) {
Transferable t = null;
try {
t = new ObjectTransferable(((Dragable) jC).getCompClass());
} catch (Exception e) {
Debug.trace(e.toString());
return t;
public int getSourceActions(JComponent c) {
return DnDConstants.ACTION_MOVE;
public boolean canImport(JComponent comp, DataFlavor[] flavors) {
if (!(comp instanceof Dragable) && flavors[0].equals(df))
return true;
return false;
public boolean importData(JComponent comp, Transferable t) {
JComponent c = null;
try {
c = (JComponent) t.getTransferData(df);
} catch (Exception e) {
Debug.trace(e.toString());
comp.add(c);
comp.validate();
return true;
public class ObjectTransferable implements Transferable {
private static DataFlavor df = null;
private Class objectClass;
ObjectTransferable(Class objectClass) {
try {
df = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType);
} catch (ClassNotFoundException e) {
System.out.println("ObjectTransferable: " + e);
this.objectClass = objectClass;
* @see java.awt.datatransfer.Transferable#getTransferDataFlavors()
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { df };
* @see java.awt.datatransfer.Transferable#isDataFlavorSupported(DataFlavor)
public boolean isDataFlavorSupported(DataFlavor testDF) {
return testDF.equals(df);
* @see java.awt.datatransfer.Transferable#getTransferData(DataFlavor)
public Object getTransferData(DataFlavor arg0)
throws UnsupportedFlavorException, IOException {
return ObjectFactory.instantiate(objectClass);
}And of course the test class:public class DragAndDropTest extends JFrame
JPanel leftPanel = new JPanel();
JPanel rightPanel = new JPanel();
Container contentPane = getContentPane();
Dragable dragableJLabel;
Dragable dragableJButton;
Dragable dragableJTextField;
Dragable dragableJTextArea;
* Constructor DragAndDropTest.
* @param title
public DragAndDropTest(String title)
super(title);
dragableJLabel = new Dragable(JLabel.class);
dragableJButton = new Dragable(JButton.class);
dragableJTextField = new Dragable(JTextField.class);
dragableJTextArea = new Dragable(JTextArea.class);
leftPanel.setBorder(new EtchedBorder());
BoxLayout boxLay = new BoxLayout(leftPanel, BoxLayout.Y_AXIS);
leftPanel.setLayout(boxLay);
leftPanel.add(dragableJLabel);
leftPanel.add(dragableJButton);
leftPanel.add(dragableJTextField);
leftPanel.add(dragableJTextArea);
rightPanel.setPreferredSize(new Dimension(500,500));
rightPanel.setBorder(new EtchedBorder());
rightPanel.setTransferHandler(new ObjectTransferHandler());
contentPane.setLayout(new BorderLayout());
contentPane.add(leftPanel, "West");
contentPane.add(rightPanel, "Center");
public static void main(String[] args)
JFrame frame = new DragAndDropTest("Drag and Drop Test");
frame.pack();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}I wrote this code some time ago, so it won't be perfect but hopefully will give you some good ideas.
Regards,
Tim -
Need help with JTextArea and Scrolling
import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;
import javax.swing.*;
public class MORT_RETRY extends JFrame implements ActionListener
private JPanel keypad;
private JPanel buttons;
private JTextField lcdLoanAmt;
private JTextField lcdInterestRate;
private JTextField lcdTerm;
private JTextField lcdMonthlyPmt;
private JTextArea displayArea;
private JButton CalculateBtn;
private JButton ClrBtn;
private JButton CloseBtn;
private JButton Amortize;
private JScrollPane scroll;
private DecimalFormat calcPattern = new DecimalFormat("$###,###.00");
private String[] rateTerm = {"", "7years @ 5.35%", "15years @ 5.5%", "30years @ 5.75%"};
private JComboBox rateTermList;
double interest[] = {5.35, 5.5, 5.75};
int term[] = {7, 15, 30};
double balance, interestAmt, monthlyInterest, monthlyPayment, monPmtInt, monPmtPrin;
int termInMonths, month, termLoop, monthLoop;
public MORT_RETRY()
Container pane = getContentPane();
lcdLoanAmt = new JTextField();
lcdMonthlyPmt = new JTextField();
displayArea = new JTextArea();//DEFINE COMBOBOX AND SCROLL
rateTermList = new JComboBox(rateTerm);
scroll = new JScrollPane(displayArea);
scroll.setSize(600,170);
scroll.setLocation(150,270);//DEFINE BUTTONS
CalculateBtn = new JButton("Calculate");
ClrBtn = new JButton("Clear Fields");
CloseBtn = new JButton("Close");
Amortize = new JButton("Amortize");//DEFINE PANEL(S)
keypad = new JPanel();
buttons = new JPanel();//DEFINE KEYPAD PANEL LAYOUT
keypad.setLayout(new GridLayout( 4, 2, 5, 5));//SET CONTROLS ON KEYPAD PANEL
keypad.add(new JLabel("Loan Amount$ : "));
keypad.add(lcdLoanAmt);
keypad.add(new JLabel("Term of loan and Interest Rate: "));
keypad.add(rateTermList);
keypad.add(new JLabel("Monthly Payment : "));
keypad.add(lcdMonthlyPmt);
lcdMonthlyPmt.setEditable(false);
keypad.add(new JLabel("Amortize Table:"));
keypad.add(displayArea);
displayArea.setEditable(false);//DEFINE BUTTONS PANEL LAYOUT
buttons.setLayout(new GridLayout( 1, 3, 5, 5));//SET CONTROLS ON BUTTONS PANEL
buttons.add(CalculateBtn);
buttons.add(Amortize);
buttons.add(ClrBtn);
buttons.add(CloseBtn);//ADD ACTION LISTENER
CalculateBtn.addActionListener(this);
ClrBtn.addActionListener(this);
CloseBtn.addActionListener(this);
Amortize.addActionListener(this);
rateTermList.addActionListener(this);//ADD PANELS
pane.add(keypad, BorderLayout.NORTH);
pane.add(buttons, BorderLayout.SOUTH);
pane.add(scroll, BorderLayout.CENTER);
addWindowListener( new WindowAdapter()
public void windowClosing(WindowEvent e)
System.exit(0);
public void actionPerformed(ActionEvent e)
String arg = lcdLoanAmt.getText();
int combined = Integer.parseInt(arg);
if (e.getSource() == CalculateBtn)
try
JOptionPane.showMessageDialog(null, "Got try here", "Error", JOptionPane.ERROR_MESSAGE);
catch(NumberFormatException ev)
JOptionPane.showMessageDialog(null, "Got here", "Error", JOptionPane.ERROR_MESSAGE);
if ((e.getSource() == CalculateBtn) && (arg != null))
try{
if ((e.getSource() == CalculateBtn) && (rateTermList.getSelectedIndex() == 1))
monthlyInterest = interest[0] / (12 * 100);
termInMonths = term[0] * 12;
monthlyPayment = combined * (monthlyInterest / (1 - (Math.pow (1 + monthlyInterest, -termInMonths))));
lcdMonthlyPmt.setText(calcPattern.format(monthlyPayment));
if ((e.getSource() == CalculateBtn) && (rateTermList.getSelectedIndex() == 2))
monthlyInterest = interest[1] / (12 * 100);
termInMonths = term[1] * 12;
monthlyPayment = combined * (monthlyInterest / (1 - (Math.pow (1 + monthlyInterest, -termInMonths))));
lcdMonthlyPmt.setText(calcPattern.format(monthlyPayment));
if ((e.getSource() == CalculateBtn) && (rateTermList.getSelectedIndex() == 3))
monthlyInterest = interest[2] / (12 * 100);
termInMonths = term[2] * 12;
monthlyPayment = combined * (monthlyInterest / (1 - (Math.pow (1 + monthlyInterest, -termInMonths))));
lcdMonthlyPmt.setText(calcPattern.format(monthlyPayment));
catch(NumberFormatException ev)
JOptionPane.showMessageDialog(null, "Invalid Entry!\nPlease Try Again", "Error", JOptionPane.ERROR_MESSAGE);
} //IF STATEMENTS FOR AMORTIZATION
if ((e.getSource() == Amortize) && (rateTermList.getSelectedIndex() == 1))
loopy(7, 5.35);
if ((e.getSource() == Amortize) && (rateTermList.getSelectedIndex() == 2))
loopy(15, 5.5);
if ((e.getSource() == Amortize) && (rateTermList.getSelectedIndex() == 3))
loopy(30, 5.75);
if (e.getSource() == ClrBtn)
rateTermList.setSelectedIndex(0);
lcdLoanAmt.setText(null);
lcdMonthlyPmt.setText(null);
displayArea.setText(null);
if (e.getSource() == CloseBtn)
System.exit(0);
private void loopy(int lTerm,double lInterest)
double total, monthly, monthlyrate, monthint, monthprin, balance, lastint, paid;
int amount, months, termloop, monthloop;
String lcd2 = lcdLoanAmt.getText();
amount = Integer.parseInt(lcd2);
termloop = 1;
paid = 0.00;
monthlyrate = lInterest / (12 * 100);
months = lTerm * 12;
monthly = amount *(monthlyrate/(1-Math.pow(1+monthlyrate,-months)));
total = months * monthly;
balance = amount;
while (termloop <= lTerm)
displayArea.setCaretPosition(0);
displayArea.append("\n");
displayArea.append("Year " + termloop + " of " + lTerm + ": payments\n");
displayArea.append("\n");
displayArea.append("Month\tMonthly\tPrinciple\tInterest\tBalance\n");
monthloop = 1;
while (monthloop <= 12)
monthint = balance * monthlyrate;
monthprin = monthly - monthint;
balance -= monthprin;
paid += monthly;
displayArea.setCaretPosition(0);
displayArea.append(monthloop + "\t" + calcPattern.format(monthly) + "\t" + calcPattern.format(monthprin) + "\t");
displayArea.append(calcPattern.format(monthint) + "\t" + calcPattern.format(balance) + "\n");
monthloop ++;
termloop ++;
public static void main(String args[])
MORT_RETRY f = new MORT_RETRY();
f.setTitle("MORTGAGE PAYMENT CALCULATOR");
f.setBounds(600, 600, 500, 500);
f.setLocationRelativeTo(null);
f.setVisible(true);
}need help with displaying the textarea correctly and the scroll bar please.
Message was edited by:
new2this2020What's the problem you're having ???
PS. -
Need Help With File Matching Records
I need help with my file matching program.
Here is how it suppose to work: FileMatch class should contain methods to read oldmast.txt and trans.txt. When a match occurs (i.e., records with the same account number appear in both the master file and the transaction file), add the dollar amount in the transaction record to the current balance in the master record, and write the "newmast.txt" record. (Assume that purchases are indicated by positive amounts in the transaction file and payments by negative amounts.)
When there is a master record for a particular account, but no corresponding transaction record, merely write the master record to "newmast.txt". When there is a transaction record, but no corresponding master record, print to a log file the message "Unmatched transaction record for account number ..." (fill in the account number from the transaction record). The log file should be a text file named "log.txt".
Here is my following program code:
// Exercise 14.8: CreateTextFile.java
// creates a text file
import java.io.FileNotFoundException;
import java.lang.SecurityException;
import java.util.Formatter;
import java.util.FormatterClosedException;
import java.util.NoSuchElementException;
import java.util.Scanner;
import org.egan.AccountRecord;
import org.egan.TransactionRecord;
public class CreateTextFile
private Formatter output1; // object used to output text to file
private Formatter output2; // object used to output text to file
// enable user to open file
public void openTransFile()
try
output1 = new Formatter("trans.txt");
catch (SecurityException securityException)
System.err.println("You do not have write access to this file.");
System.exit(1);
} // end catch
catch (FileNotFoundException filesNotFoundException)
System.err.println("Error creating file.");
System.exit(1);
} // end method openTransFile
// enable user to open file
public void openOldMastFile()
try
output2 = new Formatter("oldmast.txt");
catch (SecurityException securityException)
System.err.println("You do not have write access to this file.");
System.exit(1);
} // end catch
catch (FileNotFoundException filesNotFoundException)
System.err.println("Error creating file.");
System.exit(1);
} // end method openOldMastFile
// add transaction records to file
public void addTransactionRecords()
// object to be written to file
TransactionRecord record1 = new TransactionRecord();
Scanner input1 = new Scanner(System.in);
System.out.printf("%s\n%s\n%s\n%s\n\n",
"To terminate input, type the end-of-file indicator",
"when you are prompted to enter input.",
"On UNIX/Linux/Mac OS X type <ctrl> d then press Enter",
"On Windows type <ctrl> z then press Enter");
System.out.printf("%s\n%s",
"Enter account number (> 0) and amount.","? ");
while (input1.hasNext()) // loop until end-of-file indicator
try // output values to file
// retrieve data to be output
record1.setAccount(input1.nextInt()); // read account number
record1.setAmount(input1.nextDouble()); // read amount
if (record1.getAccount() > 0)
// write new record
output1.format("%d %.2f\n", record1.getAccount(), record1.getAmount());
} // end if
else
System.out.println("Account number must be greater than 0.");
} // end else
} // end try
catch (FormatterClosedException formatterClosedException)
System.err.println("Error writing to file.");
return;
} // end catch
catch (NoSuchElementException elementException)
System.err.println("Invalid input. Please try again.");
input1.nextLine(); // discard input so user can try again
} // end catch
System.out.printf("%s %s\n%s", "Enter account number (> 0) ",
"and amount.","? ");
} // end while
} // end method addTransactionRecords
// add account records to file
public void addAccountRecords()
// object to be written to file
AccountRecord record2 = new AccountRecord();
Scanner input2 = new Scanner(System.in);
System.out.printf("%s\n%s\n%s\n%s\n\n",
"To terminate input, type the end-of-file indicator",
"when you are prompted to enter input.",
"On UNIX/Linux/Mac OS X type <ctrl> d then press Enter",
"On Windows type <ctrl> z then press Enter");
System.out.printf("%s\n%s",
"Enter account number (> 0), first name, last name and balance.","? ");
while (input2.hasNext()) // loop until end-of-file indicator
try // output values to file
// retrieve data to be output
record2.setAccount(input2.nextInt()); // read account number
record2.setFirstName(input2.next()); // read first name
record2.setLastName(input2.next()); // read last name
record2.setBalance(input2.nextDouble()); // read balance
if (record2.getAccount() > 0)
// write new record
output2.format("%d %s %s %.2f\n", record2.getAccount(), record2.getFirstName(),
record2.getLastName(), record2.getBalance());
} // end if
else
System.out.println("Account number must be greater than 0.");
} // end else
} // end try
catch (FormatterClosedException formatterClosedException)
System.err.println("Error writing to file.");
return;
} // end catch
catch (NoSuchElementException elementException)
System.err.println("Invalid input. Please try again.");
input2.nextLine(); // discard input so user can try again
} // end catch
System.out.printf("%s %s\n%s", "Enter account number (> 0),",
"first name, last name and balance.","? ");
} // end while
} // end method addAccountRecords
// close file
public void closeTransFile()
if (output1 != null)
output1.close();
} // end method closeTransFile
// close file
public void closeOldMastFile()
if (output2 != null)
output2.close();
} // end method closeOldMastFile
} // end class CreateTextFile--------------------------------------------------------------------------------------------------
// Exercise 14.8: CreateTextFileTest.java
// Testing class CreateTextFile
public class CreateTextFileTest
// main method begins program execution
public static void main( String args[] )
CreateTextFile application = new CreateTextFile();
application.openTransFile();
application.addTransactionRecords();
application.closeTransFile();
application.openOldMastFile();
application.addAccountRecords();
application.closeOldMastFile();
} // end main
} // end class CreateTextFileTest-------------------------------------------------------------------------------------------------
// Exercise 14.8: TransactionRecord.java
// A class that represents on record of information
package org.egan; // packaged for reuse
public class TransactionRecord
private int account;
private double amount;
// no-argument constructor calls other constructor with default values
public TransactionRecord()
this(0,0.0); // call two-argument constructor
} // end no-argument AccountRecord constructor
// initialize a record
public TransactionRecord(int acct, double amt)
setAccount(acct);
setAmount(amt);
} // end two-argument TransactionRecord constructor
// set account number
public void setAccount(int acct)
account = acct;
} // end method setAccount
// get account number
public int getAccount()
return account;
} // end method getAccount
// set amount
public void setAmount(double amt)
amount = amt;
} // end method setAmount
// get amount
public double getAmount()
return amount;
} // end method getAmount
} // end class TransactionRecord -------------------------------------------------------------------------------------------------
// Exercise 14.8: AccountRecord.java
// A class that represents on record of information
package org.egan; // packaged for reuse
import org.egan.TransactionRecord;
public class AccountRecord
private int account;
private String firstName;
private String lastName;
private double balance;
// no-argument constructor calls other constructor with default values
public AccountRecord()
this(0,"","",0.0); // call four-argument constructor
} // end no-argument AccountRecord constructor
// initialize a record
public AccountRecord(int acct, String first, String last, double bal)
setAccount(acct);
setFirstName(first);
setLastName(last);
setBalance(bal);
} // end four-argument AccountRecord constructor
// set account number
public void setAccount(int acct)
account = acct;
} // end method setAccount
// get account number
public int getAccount()
return account;
} // end method getAccount
// set first name
public void setFirstName(String first)
firstName = first;
} // end method setFirstName
// get first name
public String getFirstName()
return firstName;
} // end method getFirstName
// set last name
public void setLastName(String last)
lastName = last;
} // end method setLastName
// get last name
public String getLastName()
return lastName;
} // end method getLastName
// set balance
public void setBalance(double bal)
balance = bal;
} // end method setBalance
// get balance
public double getBalance()
return balance;
} // end method getBalance
// combine balance and amount
public void combine(TransactionRecord record)
balance = (getBalance() + record.getAmount());
} // end method combine
} // end class AccountRecord -------------------------------------------------------------------------------------------------
// Exercise 14.8: FileMatch.java
import java.io.File;
import java.io.FileNotFoundException;
import java.lang.IllegalStateException;
import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.Formatter;
import java.util.FormatterClosedException;
import org.egan.AccountRecord;
import org.egan.TransactionRecord;
public class FileMatch
private Scanner inTransaction;
private Scanner inOldMaster;
private Formatter outNewMaster;
private Formatter theLog;
// enable user to open file
public void openTransFile()
try
inTransaction = new Scanner(new File("trans.txt"));
} // end try
catch (FileNotFoundException fileNotFoundException)
System.err.println("Error opening file.");
System.exit(1);
} // end catch
} // end method openTransFile
// enable user to open file
public void openOldMastFile()
try
inOldMaster = new Scanner(new File("oldmast.txt"));
} // end try
catch (FileNotFoundException fileNotFoundException)
System.err.println("Error opening file.");
System.exit(1);
} // end catch
} // end method openOldMastFile
// enable user to open file
public void openNewMastFile()
try
outNewMaster = new Formatter("newmast.txt");
catch (SecurityException securityException)
System.err.println("You do not have write access to this file.");
System.exit(1);
} // end catch
catch (FileNotFoundException filesNotFoundException)
System.err.println("Error creating file.");
System.exit(1);
} // end method openNewMastFile
// enable user to open file
public void openLogFile()
try
theLog = new Formatter("log.txt");
catch (SecurityException securityException)
System.err.println("You do not have write access to this file.");
System.exit(1);
} // end catch
catch (FileNotFoundException filesNotFoundException)
System.err.println("Error creating file.");
System.exit(1);
} // end method openLogFile
// update records
public void updateRecords()
TransactionRecord transaction = new TransactionRecord();
AccountRecord account = new AccountRecord();
try // read records from file using Scanner object
System.out.println("Start file matching.");
while (inTransaction.hasNext() && inOldMaster.hasNext())
transaction.setAccount(inTransaction.nextInt()); // read account number
transaction.setAmount(inTransaction.nextDouble()); // read amount
account.setAccount(inOldMaster.nextInt()); // read account number
account.setFirstName(inOldMaster.next()); // read first name
account.setLastName(inOldMaster.next()); // read last name
account.setBalance(inOldMaster.nextDouble()); // read balance
if (transaction.getAccount() == account.getAccount())
while (inTransaction.hasNext() && transaction.getAccount() == account.getAccount())
account.combine(transaction);
outNewMaster.format("%d %s %s %.2f\n",
account.getAccount(), account.getFirstName(), account.getLastName(),
account.getBalance());
transaction.setAccount(inTransaction.nextInt()); // read account number
transaction.setAmount(inTransaction.nextDouble()); // read amount
else if (transaction.getAccount() != account.getAccount())
outNewMaster.format("%d %s %s %.2f\n",
account.getAccount(), account.getFirstName(), account.getLastName(),
account.getBalance());
theLog.format("%s%d","Unmatched transaction record for account number ",transaction.getAccount());
} // end while
System.out.println("Finish file matching.");
} // end try
catch (NoSuchElementException elementException)
System.err.println("File improperly formed.");
inTransaction.close();
inOldMaster.close();
System.exit(1);
} // end catch
catch (IllegalStateException stateException)
System.err.println("Error reading from file.");
System.exit(1);
} // end catch
} // end method updateRecords
// close file and terminate application
public void closeTransFile()
if (inTransaction != null)
inTransaction.close();
} // end method closeTransFile
// close file and terminate application
public void closeOldMastFile()
if (inOldMaster != null)
inOldMaster.close();
} // end method closeOldMastFile
// close file
public void closeNewMastFile()
if (outNewMaster != null)
outNewMaster.close();
} // end method closeNewMastFile
// close file
public void closeLogFile()
if (theLog != null)
theLog.close();
} // end method closeLogFile
} // end class FileMatch-------------------------------------------------------------------------------------------------
// Exercise 14.8: FileMatchTest.java
// Testing class FileMatch
public class FileMatchTest
// main method begins program execution
public static void main( String args[] )
FileMatch application = new FileMatch();
application.openTransFile();
application.openOldMastFile();
application.openNewMastFile();
application.openLogFile();
application.updateRecords();
application.closeLogFile();
application.closeNewMastFile();
application.closeOldMastFile();
application.closeTransFile();
} // end main
} // end class FileMatchTest-------------------------------------------------------------------------------------------------
Sample data for master file:
Master file
Account Number Name Balance
100 Alan Jones 348.17
300 Mary Smith 27.19
500 Sam Sharp 0.00
700 Suzy Green -14.22Sample data for transaction file:
Transaction file Transaction
Account Number Amount
100 27.14
300 62.11
300 83.89
400 100.56
700 80.78
700 1.53
900 82.17 -------------------------------------------------------------------------------------------------
My FileMatch class program above has bugs in it.
The correct results for the newmast.txt:
100 Alan Jones 375.31
300 Mary Smith 173.19
500 Sam Sharp 0.00
700 Suzy Green 68.09The correct results for the log.txt:
Unmatched transaction record for account number 400Unmatched transaction record for account number 900------------------------------------------------------------------------------------------------
My results for the newmast.txt:
100 Alan Jones 375.31
300 Mary Smith 111.08
500 Sam Sharp 0.00
700 Suzy Green -12.69My results for the log.txt
Unmatched transaction record for account number 700-------------------------------------------------------------------------------------------------
I am not sure what is wrong with my code above to make my results different from the correct results.
Much help is appreciated. Please help.From the output, it looks like one problem is just formatting -- apparently you're including a newline in log entries and not using tabs for the newmast output file.
As to why the numbers are off -- just from glancing over it, it appears that the problem is when you add multiple transaction values. Since account.combine() is so simple, I suspect that you're either adding creating transaction objects incorrectly or not creating them when you should be.
Create test input data that isolates a single case of this (e.g., just the Mary Smith case), and then running your program in a debugger or adding debugging code to the add/combine method, so you can see what's happening in detail.
Also I'd recommend reconsidering your design. It's a red flag if a class has a name with "Create" in it. Classes represent bundles of independant state and transformations on that state, not things to do.
Maybe you are looking for
-
After ios5 update, iCal week view Oct 2-8 has 2 Saturdays?
Is anyone else having problems with iCal week view on iPad after ios5 update? Two major changes have occurred... 1. Week view used to start on Monday, now Sunday (and can't change it back). 2. If you look at the week October 2-8, 2011 there are 2 Sat
-
Macbook Pro and Samsung monitor
I bought a Samsung 22inch monitor. It works for my old G4 with VGA analog, but if I hook my MBP to the monitor through DVI all I get is my screensaver on the monitor. I tried detect monitor and nothing happens. Any thoughts ?
-
Use short description on OLAP dimension member in disco for OLAP
Hi All, I've noticed in the spreadsheet add-in you can decide under "query options" whether to use the Long or Short Description when displaying a dimension member. How do you do the same in discoverer PLUS for OLAP ? I cant find it anwhere. Cheers,
-
Problem with image capture via firewire from sony camcorder TRV20E
I'm new to premiere pro. Have checked compat. of camcorder with PProCS3 and am told by Adobe technical team it is ok. So what am I not doing? I've followed the on-line help but still no video. It must be in the settings PLEASE can someone offer me so
-
Cant find photoshop elements 6 mac
Can anybody point me to the PS ELEMENTS 6 FOR MAC installer please?