Impementing First GUI into Current App

Please support our Java advertiser: Programming Forums - DaniWeb Sister Site
Thread Solved

Join Date: Jul 2007
Posts: 226
Reputation: no1zson is on a distinguished road 
Solved Threads: 1
no1zson's Avatar
no1zson no1zson is offline Offline
Posting Whiz in Training

Re: Impementing First GUI into Current App

 
0
  #11
Jul 23rd, 2007
I did have concerns about the toString, but again fall into unfamiliar territory with that function.
I do understand what you say about the list being empty, which goes back to an overall question about how the GUI pulls information, and from where.
I think I am way over my head here, I think I probably need to scrap the JLIST and just go back to the original plan and insert everything into a new gui class that uses my Compactdisk and Cdwartist classes.
Right now I am trying to build on a foundation I have not properly laid yet.
1st thing I need to do is get a QUI screen with some fields in it where I can enter information into my existing array.
Then I will worry about sorting, adding and all that other stuff.
Would you suggest I take everything from Inventory and just re-write it into my new class, so that I do not use Inventory anymore?
I never drew first, but I drew first blood.
I'm no ones son, unforgiven.
Reply With Quote Quick reply to this message  
Join Date: May 2007
Posts: 4,508
Reputation: Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future 
Solved Threads: 522
Moderator
Featured Poster
Ezzaral's Avatar
Ezzaral Ezzaral is offline Offline
Industrious Poster

Re: Impementing First GUI into Current App

 
0
  #12
Jul 23rd, 2007
You could, if you feel that is easier for you to logically work with. JList has it's own container (the list model) that you can put CDs into. The part from your loop in inventory will largely be replaced by code in a button that creates a new CD, reads the info from your text fields and sets the properties on the CD, and then adds it to the list model.
Reply With Quote Quick reply to this message  
Join Date: Jul 2007
Posts: 226
Reputation: no1zson is on a distinguished road 
Solved Threads: 1
no1zson's Avatar
no1zson no1zson is offline Offline
Posting Whiz in Training

Re: Impementing First GUI into Current App

 
0
  #13
Jul 23rd, 2007
That is a lot of my problem right there, at this point I am not even sure what I should do. This is my first attempt at GUI so I wanted to stay as basic as possible, and keep as much of my existing code as possible because I understand it as it is (for the most part.)
I have never used JList either, so between that and GUI both at once I am just getting confused as to what is changing by implimenting one, and what changes because of the other.
I am looking at the code I have attempted today, some for GUI frames, some for buttons, some for JList ... all of it new, and none of it clear.
I think I am going to delete everything I have tried up to this point, and just start over. :o(
I never drew first, but I drew first blood.
I'm no ones son, unforgiven.
Reply With Quote Quick reply to this message  
Join Date: May 2007
Posts: 4,508
Reputation: Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future 
Solved Threads: 522
Moderator
Featured Poster
Ezzaral's Avatar
Ezzaral Ezzaral is offline Offline
Industrious Poster

Re: Impementing First GUI into Current App

 
0
  #14
Jul 23rd, 2007
Yes, GUI code can be a little complex to jump into. You just have to start simple and keep at it. Perhaps this demo will help. It's just a tiny form I knocked up that let's you add a CD with artist and title to a JList.
  1. import javax.swing.DefaultListModel;
  2.  
  3. public class ListDemo extends javax.swing.JFrame {
  4.  
  5. private javax.swing.JButton btnAdd;
  6. private javax.swing.JScrollPane jScrollPane1;
  7. private javax.swing.JLabel lblArtist;
  8. private javax.swing.JLabel lblTitle;
  9. private javax.swing.JList lstInventory;
  10. private javax.swing.JTextField txtArtist;
  11. private javax.swing.JTextField txtTitle;
  12.  
  13. private DefaultListModel listModel;
  14.  
  15.  
  16. public ListDemo() {
  17. initComponents();
  18. }
  19.  
  20. private void initComponents() {
  21. lblArtist = new javax.swing.JLabel();
  22. txtArtist = new javax.swing.JTextField();
  23. lblTitle = new javax.swing.JLabel();
  24. txtTitle = new javax.swing.JTextField();
  25. btnAdd = new javax.swing.JButton();
  26. jScrollPane1 = new javax.swing.JScrollPane();
  27. lstInventory = new javax.swing.JList();
  28.  
  29. getContentPane().setLayout(new java.awt.FlowLayout());
  30.  
  31. setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  32.  
  33. lblArtist.setText("Artist");
  34. getContentPane().add(lblArtist);
  35.  
  36. txtArtist.setMinimumSize(new java.awt.Dimension(75, 19));
  37. txtArtist.setPreferredSize(new java.awt.Dimension(75, 19));
  38. getContentPane().add(txtArtist);
  39.  
  40. lblTitle.setText("Title");
  41. getContentPane().add(lblTitle);
  42.  
  43. txtTitle.setMinimumSize(new java.awt.Dimension(75, 19));
  44. txtTitle.setPreferredSize(new java.awt.Dimension(75, 19));
  45. getContentPane().add(txtTitle);
  46.  
  47. btnAdd.setText("Add");
  48. btnAdd.addActionListener(new java.awt.event.ActionListener() {
  49. public void actionPerformed(java.awt.event.ActionEvent evt) {
  50. btnAddActionPerformed(evt);
  51. }
  52. });
  53.  
  54. getContentPane().add(btnAdd);
  55.  
  56. listModel = new DefaultListModel();
  57. lstInventory.setModel(listModel);
  58.  
  59. jScrollPane1.setViewportView(lstInventory);
  60.  
  61. getContentPane().add(jScrollPane1);
  62.  
  63. pack();
  64. }
  65.  
  66. private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
  67. // Create cd and set title
  68. CD cd = new CD(txtArtist.getText());
  69. cd.setTitle(txtTitle.getText());
  70.  
  71. // Add the cd to list
  72. listModel.addElement(cd);
  73.  
  74. // Clear the text fields
  75. txtArtist.setText(null);
  76. txtTitle.setText(null);
  77. }
  78.  
  79. public static void main(String args[]) {
  80. java.awt.EventQueue.invokeLater(new Runnable() {
  81. public void run() {
  82. new ListDemo().setVisible(true);
  83. }
  84. });
  85. }
  86.  
  87. /** Small CD class to hold our data */
  88. class CD {
  89. private String artist;
  90. private String title;
  91.  
  92. public CD(String artist){
  93. this.artist = artist;
  94. }
  95.  
  96. public void setTitle(String title){
  97. this.title = title;
  98. }
  99.  
  100. public String toString(){
  101. return artist + " - " + title;
  102. }
  103. }
  104.  
  105.  
  106. }
Reply With Quote Quick reply to this message  
Join Date: Jul 2007
Posts: 226
Reputation: no1zson is on a distinguished road 
Solved Threads: 1
no1zson's Avatar
no1zson no1zson is offline Offline
Posting Whiz in Training

Re: Impementing First GUI into Current App

 
0
  #15
Jul 23rd, 2007
I am going to see what I can do with that and get back with you tomorrow.
I appreciate your patience.
I never drew first, but I drew first blood.
I'm no ones son, unforgiven.
Reply With Quote Quick reply to this message  
Join Date: Jul 2007
Posts: 226
Reputation: no1zson is on a distinguished road 
Solved Threads: 1
no1zson's Avatar
no1zson no1zson is offline Offline
Posting Whiz in Training

Re: Impementing First GUI into Current App

 
0
  #16
Jul 23rd, 2007
Just so you know I was not just sitting around waiting on code, here is what I had come up with over the afternoon ... looking at what you hve done I think I was at least headed in the right direction. I was rewriting my entire Inventory class from the ground up. I am not exactly sure where I was going with it, but I kept the idea stream flowing and this is where it took me. :o)

  1. import java.util.*;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5.  
  6. public class Inventory2 extends JFrame
  7. {
  8. private JLabel cdNameLabel; // name label
  9. private JLabel artistLabel; // item number label
  10. private JLabel nstockLabel; // units in stock label
  11. private JLabel priceLabel; // price each label
  12. private JLabel itemLabel; // item number label
  13. private JLabel valueLabel; // value of that item label
  14. private JLabel rstkLabel; // cost to restock label
  15. private JLabel totalLabel; // total value of inventory label
  16. private JTextField cdNameField; // name display
  17. private JTextField artistField; // artist display
  18. private JFormattedTextField nstockField; // units in stock display
  19. private JFormattedTextField priceField; // price each display
  20. private JTextField itemField; // item number display
  21. private JFormattedTextField valueField; // value of that item display
  22. private JFormattedTextField rstkField; // cost to restock display
  23. private NumberFormat nstockFormat; // format field and parse numbers
  24. private NumberFormat priceFormat; // format field and parse numbers
  25. private NumberFormat valueFormat; // format field and parse numbers
  26. private NumberFormat rstkFormat; // format field and parse numbers
  27. private JButton firstBtn; // first button
  28. private JButton prevBtn; // previous button
  29. private JButton nextBtn; // next button
  30. private JButton lastBtn; // last button
  31. private JPanel buttonJPanel; // JPanle to hold buttons
  32. private JPanel fieldJPanel; // JPanel to hold labels and displays
  33. private JPanel fontJPanel; // JPanel to display logo
  34. private int currCD; // current product display to use for button action
  35. private int i; // iterator
  36. private double total = 0; // variable for total inventory
  37.  
  38. public Inventory2() // create class and method to perform GUI build
  39. {
  40. initComponents();
  41. }
  42.  
  43. private void initComponents()
  44. {
  45. // create label names
  46. cdNameLabel = new JLabel("CD Name:");
  47. artistLabel = new JLabel("Artist:");
  48. nstockLabel = new JLabel("In Stock:");
  49. priceLabel = new JLabel("Each Item Cost:");
  50. itemLabel = new JLabel("Item Number:");
  51. valueLabel = new JLabel("Value of Item Inventory:");
  52. rstkLabel = new JLabel("Cost to Re-Stock Item:");
  53. totalLabel = new JLabel("Total Value of Inventory:$"+total);
  54.  
  55. // create button names
  56. firstBtn = new JButton("First");
  57. prevBtn = new JButton("Previous");
  58. nextBtn = new JButton("Next");
  59. lastBtn = new JButton("Last");
  60.  
  61. // create textFields and set uneditable
  62. cdNameField = new JTextField(15);
  63. cdNameField.setEditable(false);
  64.  
  65. artistField = new JTextField(15);
  66. artistField.setEditable(false);
  67. ;
  68. nstockField = new JFormattedTextField(nstockFormat);
  69. nstockField.setEditable(false);
  70. nstockField.setColumns(10);
  71.  
  72. priceField = new JFormattedTextField(priceFormat);
  73. priceField.setEditable(false);
  74. priceField.setColumns(10);
  75.  
  76. itemField = new JTextField(15);
  77. itemField.setEditable(false);
  78.  
  79. valueField = new JFormattedTextField(valueFormat);
  80. valueField.setEditable(false);
  81. valueField.setColumns(10);
  82.  
  83. rstkField = new JFormattedTextField(rstkFormat);
  84. rstkField.setEditable(false);
  85. rstkField.setColumns(10);
  86.  
  87. // add buttons to panel
  88. JPanel buttons = new JPanel(); // set up panel
  89. buttons.setLayout( new GridLayout(1, 4)); //set layout
  90. // add buttons to buttons
  91. buttons.add(firstBtn);
  92. buttons.add(prevBtn);
  93. buttons.add(nextBtn);
  94. buttons.add(lastBtn);
  95.  
  96.  
  97. // create cd Array
  98. CdwArtist[] cds = new CdwArtist[100];
  99.  
  100. for(int i = 0; i < cds.length && !nameInput.equalsIgnoreCase("STOP"); i++)
  101. cds[i] = new CdwArtist();
  102. cds[i].setName(nameInput);
  103. //total += cdProduct[currCD].calcValue(); // calculate total inventory cost
  104.  
  105. // add values to textFields
  106. cdNameField.setText(cds[i].getProdName());
  107. artistField.setValue(new Integer(cds[i].getArtist()));
  108. nstockField.setValue(new Integer(cds[i].getUnits()));
  109. priceField.setValue("$"+new Double(cds[i].getPrice()));
  110. itemField.setText(cds[i].getFeature());
  111. valueField.setValue("$"+new Double(cds[i].calcValue()));
  112. rstkField.setValue("$"+new Double(cds[i].calcValueRstk()))
I never drew first, but I drew first blood.
I'm no ones son, unforgiven.
Reply With Quote Quick reply to this message  
Join Date: Jul 2007
Posts: 226
Reputation: no1zson is on a distinguished road 
Solved Threads: 1
no1zson's Avatar
no1zson no1zson is offline Offline
Posting Whiz in Training

Re: Impementing First GUI into Current App

 
0
  #17
Jul 24th, 2007
I did not understand it at first, but after sitting down and comparing it to what I was writing I could see what I was trying to do, and it cleared up in my head.
Then I started coding, and as I created everything I could see the logic behind what was being built, how the buttons, fields, and JList all work together.
I do have a few questions of course, if you have a moment,
Here is everything, from your original work, to what I have added:
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.text.*;
import java.lang.*;

public class Inventory2 extends JFrame
{
	private JLabel cdNameLabel; // name label 
	private JLabel artistLabel; // item number label 
	private JLabel nstockLabel; // units in stock label 
	private JLabel priceLabel; // price each label 
	private JLabel itemLabel; // item number label 
	private JLabel valueLabel; // value of that item label 
	private JLabel rstkLabel; // cost to restock label 
	private JLabel totalLabel; // total value of inventory label 
	private JTextField cdNameField; // name display 
	private JTextField artistField; // artist display 
	private JFormattedTextField nstockField; // units in stock display 
	private JFormattedTextField priceField; // price each display 
	private JTextField itemField; // item number display 
	private JFormattedTextField valueField; // value of that item display 
	private JFormattedTextField rstkField; // cost to restock display
	private JFormattedTextField totalField; // value of all inventory combine 
	private NumberFormat nstockFormat; // format field and parse numbers 
	private NumberFormat priceFormat; // format field and parse numbers 
	private NumberFormat valueFormat; // format field and parse numbers 
	private NumberFormat rstkFormat; // format field and parse numbers 
	private JButton btnAdd; // first button 
	private JButton btnPrev; // previous button 
	private JButton btnNext; // next button 
	private JButton btnDel; // last button 
	//private JPanel buttonJPanel; // JPanle to hold buttons 
	//private JPanel fieldJPanel; // JPanel to hold labels and displays 
	//private JPanel fontJPanel; // JPanel to display logo 
	private int currCD; // current product display to use for button action 
	private int i; // iterator 
	private double total = 0; // variable for total inventory 
	private JList Inventorylist; // JList to take place of old array
	private DefaultListModel listModel;
	private JScrollPane jScrollPanel;  

	public Inventory2() // create class and method to perform GUI build 
	{ 
		initComponents(); 
	} 

	private void initComponents() 
	{ 
		// create label names 
		cdNameLabel = new JLabel("CD Name:"); 
		artistLabel = new JLabel("Artist:");
		nstockLabel = new JLabel("In Stock:"); 
		priceLabel = new JLabel("Each Item Cost:"); 
		itemLabel = new JLabel("Item Number:"); 
		valueLabel = new JLabel("Value of Item Inventory:"); 
		rstkLabel = new JLabel("Cost to Re-Stock Item:"); 
		totalLabel = new JLabel("Total Value of Inventory:$"+total); 
		
		// JList
		jScrollPanel = new JScrollPane();
		Inventorylist = new JList(); 
		
		// buttons 
		btnAdd = new JButton(); 
		btnNext = new JButton(); 
		btnPrev = new JButton(); 
		btnDel = new JButton(); 
		
		getContentPane().setLayout(new FlowLayout());
		
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

		// place textFields and labels
		
		//artist
		artistLabel.setText("Artist"); 
		getContentPane().add(artistLabel); 

		artistField.setMinimumSize(new Dimension(75,19)); 
		artistField.setPreferredSize(new Dimension(75,19));
		getContentPane().add(artistField); 
		
		// cd name
		cdNameLabel.setText("CD Name"); 
		getContentPane().add(cdNameLabel); 

		cdNameField.setMinimumSize(new Dimension(75,19)); 
		cdNameField.setPreferredSize(new Dimension(75,19));
		getContentPane().add(cdNameField);
		
		// copies in stock
		nstockLabel.setText("Copies In Stock"); 
		getContentPane().add(nstockLabel); 

		nstockField.setMinimumSize(new Dimension(75,19)); 
		nstockField.setPreferredSize(new Dimension(75,19));
		getContentPane().add(nstockField); 
		
		//price of cd
		priceLabel.setText("Price"); 
		getContentPane().add(priceLabel); 

		priceField.setMinimumSize(new Dimension(75,19)); 
		priceField.setPreferredSize(new Dimension(75,19));
		getContentPane().add(priceField); 
		
		//item number of cd
		itemLabel.setText("Item Number"); 
		getContentPane().add(itemLabel); 

		itemField.setMinimumSize(new Dimension(75,19)); 
		itemField.setPreferredSize(new Dimension(75,19));
		getContentPane().add(itemField);; 
		
		// value of individual cd in stock
		valueLabel.setText("Value"); 
		getContentPane().add(valueLabel); 

		valueField.setMinimumSize(new Dimension(75,19)); 
		valueField.setPreferredSize(new Dimension(75,19));
		getContentPane().add(valueField); 
		
		// restocking fee
		rstkLabel.setText("Restock Fee"); 
		getContentPane().add(rstkLabel); 

		rstkField.setMinimumSize(new Dimension(75,19)); 
		rstkField.setPreferredSize(new Dimension(75,19));
		getContentPane().add(rstkField);
		
		// total value of inventory
		totalLabel.setText("Total Inventory Value"); 
		getContentPane().add(totalLabel); 

		totalField.setMinimumSize(new Dimension(75,19)); 
		totalField.setPreferredSize(new Dimension(75,19));
		getContentPane().add(totalField);	
		
		// add buttons
		//ADD
		btnAdd.setText("Add");
		  
  1. btnAdd.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent evt) { btnAddActionPerformed(evt); } }); getContentPane().add(btnAdd); // PREVIOUS btnPrev.setText("Previous");
  1. btnPrev.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent evt) { btnAddActionPerformed(evt); } }); getContentPane().add(btnPrev); // NEXT btnNext.setText("Next");
  1. btnNext.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent evt) { btnAddActionPerformed(evt); } }); getContentPane().add(btnNext); // DELETE btnDel.setText("Delete");
  1. btnDel.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent evt) { btnAddActionPerformed(evt); } }); getContentPane().add(btnDel); // new Jlist model listModel = new DefaultListModel(); Inventorylist.setModel(listModel); jScrollPanel.setViewportView(Inventorylist); getContentPane().add(jScrollPanel); pack(); }// close private void btnAddActionPerformed(ActionEvent evt) { // Create cd to add CD cd = new CD(artistField.getText()); cd.setcdName(cdNameField.getText()); cd.setitem(itemField.getText()); cd.setnstock(nstockField.getText()); cd.setprice(priceField.getText()); cd.setvalue(valueField.getText()); cd.settotal(totalField.getText()); cd.setrstk(rstkField.getText()); // Add cd to list listModel.addElement(cd); // Clear the text fields after add artistField.setText(null); cdNameField.setText(null); itemField.setText(null); nstockField.setText(null); priceField.setText(null); valueField.setText(null); rstkField.setText(null); totalField.setText(null); }// end ADD // run it public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Inventory2().setVisible(true); } }); } } // close class

That is the first class I have written where I understood what I was doing from start to finish. I do have a few details I need to pick your brain about.
first: CD cd = new CD(artistField.getText());
I know what this is doing, but I am getting the error cannot find symbol pointing at CD.
I even understand the error, I do not see where CD is defined anywhere, nor do I know where it would be put.
second: I also plan to go in an modify my previous Compactdisk and CdwArtist classes for use with this class. How does this class know to use those two?
I never drew first, but I drew first blood.
I'm no ones son, unforgiven.
Reply With Quote Quick reply to this message  
Join Date: May 2007
Posts: 4,508
Reputation: Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future Ezzaral has a brilliant future 
Solved Threads: 522
Moderator
Featured Poster
Ezzaral's Avatar
Ezzaral Ezzaral is offline Offline
Industrious Poster

Re: Impementing First GUI into Current App

 
0
  #18
Jul 24th, 2007
first: CD cd = new CD(artistField.getText());
I know what this is doing, but I am getting the error cannot find symbol pointing at CD.
I even understand the error, I do not see where CD is defined anywhere, nor do I know where it would be put.
second: I also plan to go in an modify my previous Compactdisk and CdwArtist classes for use with this class. How does this class know to use those two?
CD was the small inner class that I put in my listing to hold cd data. You will want to change that to your own CdwArtist class. You will need to override the toString method on that class so that it shows what you want in the list also. Look at the bottom of my code for the CD class definition to see how that is done.
Reply With Quote Quick reply to this message  
Join Date: Jul 2007
Posts: 226
Reputation: no1zson is on a distinguished road 
Solved Threads: 1
no1zson's Avatar
no1zson no1zson is offline Offline
Posting Whiz in Training

Re: Impementing First GUI into Current App

 
0
  #19
Jul 24th, 2007
I feel like a genious (about the CdwArtist class), I had just gotten that to work, and have my sets going to that class ...
here is what it looks like now
  1. // Create cd to add
  2. CdwArtist cd = new CdwArtist(artistField.getText());
  3. cd.setName(cdNameField.getText());
  4. cd.setItemno(itemField.getText());
  5. cd.setNstock(nstockField.getText());
  6. cd.setPrice(priceField.getText());
  7. cd.setValue(valueField.getText());
  8. cd.setTotal(totalField.getText());
  9. cd.setRestock(rstkField.getText());

It must be working because it sees that some of those fields (Itemno for example) is defined as INT in the other class.
It is erroring telling me that those parameters cannot be applied to java.lang.String
I "kind of" understand what it is saying, I have numbers in these fields, some of which I will be doing calculations as, but it is expecting a String. Right? Where would I alter that?
I am going to look at the toString right now and see if I can figure out what you are telling me there.
Thanks again for your help!
I never drew first, but I drew first blood.
I'm no ones son, unforgiven.
Reply With Quote Quick reply to this message  
Join Date: Jul 2007
Posts: 226
Reputation: no1zson is on a distinguished road 
Solved Threads: 1
no1zson's Avatar
no1zson no1zson is offline Offline
Posting Whiz in Training

Re: Impementing First GUI into Current App

 
0
  #20
Jul 24th, 2007
I believe I have the toString right.
The only thing I am having trouble with, logically, and code wise at the moment is how to solve the String/Int problem in Inventory2.

Do these fields not need to be int, double, or float in order to perform calculations on them?
I never drew first, but I drew first blood.
I'm no ones son, unforgiven.
Reply With Quote Quick reply to this message  
Reply

This thread has been marked solved.
Perhaps start a new thread instead?
Message:



Other Threads in the Java Forum
Thread Tools Search this Thread



Tag cloud for Java
About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC