EXHAUSTED PROGRAMMER NEEDS HELP!!!

I have no idea why my program runs so darn slow. It runs at a snail's pace on the unix machines I'm running on. I'm developing on a Windows box using IntelliJ IDEA and text-transfering my files to the unix machines to compile and run. I'm runing on a data set of around 30MB distributed in 40 files. I am so tired of looking for the problem. Others have done the same program and their's works in 5 minutes or less. Mine is taking around 2 hours!!! Please, if you have a clue and a heart, help me! Code below.
//* Parser skeleton for processing item-???.xml files. Must be compiled in
JDK 1.4 or above. */
/* Instructions:
This program processes all files passed on the command line (to parse
an entire diectory, type "java MyParser myFiles/*.xml" at the shell).
At the point noted below, an individual XML file has been parsed into a
DOM Document node. You should fill in code to process the node. Some auxiliary methods have been written for you. You may find them
useful.
Modified by:
Will
import java.io.*;
import java.text.*;
import java.util.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.ErrorHandler;
/* Process one items-???.xml file. */
    static void processFile(File xmlFile) {
        Document doc = null;
        try {
            doc = builder.parse(xmlFile);
        catch (IOException e) {
            e.printStackTrace();
            System.exit(3);
        catch (SAXException e) {
            System.out.println("Parsing error on file " + xmlFile);
            System.out.println("  (not supposed to happen with supplied XML files)");
            e.printStackTrace();
            System.exit(3);
        /* At this point 'doc' contains a DOM representation of an 'Items' XML
        * file. Use doc.getDocumentElement() to get the root Element. */
        System.out.println("Successfully parsed - " + xmlFile);
        /*Open the output files for each relation****************************/
        PrintWriter itemsFile = null, usersFile = null,
                bidsFile = null, categoriesFile = null;
        /*Open files for writing each of the txt files******************/
        try{
            itemsFile = new PrintWriter(new BufferedOutputStream(new FileOutputStream("Items.dat", true)), true);
            usersFile = new PrintWriter(new BufferedOutputStream(new FileOutputStream("Users.dat", true)), true);
            bidsFile = new PrintWriter(new BufferedOutputStream(new FileOutputStream("Bids.dat", true)), true);
            categoriesFile = new PrintWriter(new BufferedOutputStream(new FileOutputStream("Categories.dat", true)), true);
        }catch(FileNotFoundException e){
            System.out.println("Error trying to open an output file: " + e.getMessage());
            System.exit(0);
        /*Parse content for each relation in turn********************/
        //Write to the Items.txt file
        NodeList itemNodes = doc.getDocumentElement().getElementsByTagName("Item");
        String itemID = null;
        Element[] categories = null;
        NodeList bids = null;
        NodeList eBid = null;
        NodeList bidders = null;
        Element tempElement = null;
        Element itemElement = null;
        Element thisBid = null;
        for(int i=0; i<itemNodes.getLength(); i++){
            //Get the item Element for this iteration
            itemElement = (Element)itemNodes.item(i);
            /*Write out ItemID**************************************/
            itemID = itemElement.getAttribute("ItemID");
            itemsFile.print(itemID + colSep);
            /*Write out Name****************************************/
            itemsFile.print(getElementTextByTagNameNR(itemElement, "Name")+ colSep);
            /*Write out the Currently element***********************/
            itemsFile.print(strip(getElementTextByTagNameNR(itemElement, "Currently")));
            itemsFile.print(colSep);
            /*Write out the Buy_Price element, if it exists*********/
            Element checkNode = null;
            if( (checkNode = (getElementByTagNameNR(itemElement, "Buy_Price"))) != null){
                itemsFile.print(strip(checkNode.getFirstChild().getNodeValue()));
            itemsFile.print(colSep);
            /*Add the First_Bid element*****************************/
            itemsFile.print(strip(getElementTextByTagNameNR(itemElement, "First_Bid")) + colSep);
            /*Now iterate over the next three elements, adding them in turn*/
            for(int j=0; j<itemTags.length;j++){
                itemsFile.print(getElementTextByTagNameNR(itemElement, itemTags[j]));
                itemsFile.print(colSep);
            /*Add the SellerID**************************************/
            itemsFile.print(getElementByTagNameNR(itemElement, "Seller").getAttribute("UserID")
                    + colSep);
            /*Finally, add the description.  Truncate, if necessary*/
            String description = new String();
            description = getElementTextByTagNameNR(itemElement, "Description");
            itemsFile.print(description.substring(0, Math.min(4000, description.length())) + colSep);
            itemsFile.println();
            /*Locate all of the Categories******************************/
            categories = getElementsByTagNameNR(itemElement, "Category");
            /*For every category in this item, write a ItemID-Category pair*/
            for(int j=0; j<categories.length; j++){
                categoriesFile.print(itemID + colSep);
                categoriesFile.println(categories[j].getFirstChild().getNodeValue() + colSep);
            if( (bids = itemElement.getElementsByTagName("Bid")) != null){
                /*Go through the bids, writing the info***********/
                for(int j=0; j<bids.getLength(); j++){
                    thisBid = (Element)bids.item(j);
                    bidsFile.print(getElementByTagNameNR(thisBid, "Bidder").getAttribute("UserID") + colSep);
                    bidsFile.print(itemID + colSep);
                    bidsFile.print(getElementTextByTagNameNR(thisBid, "Time") + colSep);
                    bidsFile.println(strip(getElementTextByTagNameNR(thisBid, "Amount"))
                            + colSep);
            /*write out userid and rating from any and all bidder nodes*/
            if( (bidders = itemElement.getElementsByTagName("Bidder")) != null){
                for(int j=0; j<bidders.getLength(); j++){
                    usersFile.print(bidders.item(j).getAttributes().getNamedItem("UserID").getNodeValue() + colSep);
                    usersFile.print(bidders.item(j).getAttributes().getNamedItem("Rating").getNodeValue() + colSep);
                    //If there's a location node, write it
                    if( (getElementByTagNameNR((Element)bidders.item(j), "Location")) != null){
                        usersFile.print(getElementTextByTagNameNR((Element)bidders.item(j), "Location"));
                    usersFile.print(colSep);
                    //If there's a country node, write it
                    if( (getElementByTagNameNR((Element)bidders.item(j), "Country")) != null){
                        usersFile.print(getElementTextByTagNameNR((Element)bidders.item(j), "Country"));
                    usersFile.println(colSep);
            /*Now write out the Seller information*******************/
            usersFile.print(getElementByTagNameNR(itemElement, "Seller").getAttribute("UserID") + colSep);
            usersFile.print(getElementByTagNameNR(itemElement, "Seller").getAttribute("Rating") + colSep);
            usersFile.print(getElementTextByTagNameNR(itemElement, "Location") + colSep);
            usersFile.print(getElementTextByTagNameNR(itemElement, "Country") + colSep);
            usersFile.println();
        itemsFile.close();
        usersFile.close();
        bidsFile.close();
        categoriesFile.close();
    }

The processing of the DOM is not the problem. Others
use the same code for the DOM and their's work in a
small fraction of the time. I am really stumped on
this one. I've never used a profiler.If you insist that the DOM processing is not the problem then you are going to have to learn to use a profiler.

Similar Messages

  • Non-Programmer Needs Help!!! (desperately)

    Ok, I want to create games for a virtual world website. I also want the website to be a game itself. Right now, I am working on creating a card game for two players (with the option of playing the computer). They each have 2 decks to draw from and a place for 2 cards to be displayed (their "hand") before they place it on the game board. I don't want their opponent to see the cards in their "hand" until they are placed on the game board. When a player has two cards in his hand, I want them to have the capability of enlarging the image of the card to full size in a pop-up type window, so they can calculate their strategy. The game itself is similar to the popular battle card games, so regular playing card games don't help me. I want the image of the card to be displayed on the game board either right side up or upside down depending upon the button pushed by the player. I want each player to play 1 card from one pile (blue-50 cards total) and 4 cards from the other pile (red-200 cards total). They can only draw 1 blue card, and 1 red card on their first turn. After that, they can only draw 1 red card per turn, until they have drawn 4 red cards total. The total number of cards each player can have on the game board is 5 cards, then the round ends. Each deck has the same cards but shuffled in random order. The decks can't be stacked the same, for each player. Each card has a certain value. The card from the blue pile is the main card that the cards from the red pile will add to or subtract from. If the match between the opponents is tied, no score is given to either player, but the cards from both players to go to the corresponding "tie" piles (one red and one blue) that will be randomly distributed by the computer, once each player has exhausted their own decks first. The tie piles are used at the end of the game to play the final round or rounds of the game. After each round, the victor of that round gets the points on his opponents cards, plus 1000 points for winning the round. I want the cards to just "disappear" or placed in the computer's "discard" pile after each round, so they cannot be used again. I want each player to have a turn being first at the beginning or each round. (If player 1 is first in round 1, player 2 will go first in round 2 and so on.) I want the scores for each card to be calculated and placed in a box according to which player the cards belong to. Once the round is ended, the victor will receive the final score in their "total score" box. I also want a "round number" box to indicate which round it is. No winner will be declared until the players use all their cards and/or the computer deals all the tie deck cards (which are shuffled before dealing). At the end of the game, the person with the highest score is the winner.
    I also would like to allow players to challenge each other and accept or decline a challenge. In order to do that, the players must login first. There must also be a list of available players to challenge.
    Is there a program that not only builds the user interface, but also will allow me to insert my graphics? Kind of like WYSIWYG HTML builders? (Preferably FREE) I have a gui builder, but have no clue as to how to put in the graphics or get it to work. I don't have any connections to the programming world, nor am I able to return to school at this time. The programs that Sun offers are not adequate for me, because I need to be able to install it, and run it without going through the "msdos classpath" thingy. I need a "wizard" type program that is truly for "dummies." Something that I can just put in my images and tell it what I want it to do IN PLAIN ENGLISH. For instance, if I want the "login button" to save the login information to a file and/or to the game. The players can have their same login info stored in a file, and they can return without creating a new name. The website service I want to place this on, doesn't allow chmoding for CGI, so I can't use that. Another example, if I want each card to have a differnt point level and either subtract from or add to the blue. Or how to get the pop-up for the card displayed in the player's hand. I don't know what else to do. Any suggestions?

    <blockquote>
    The programs that Sun offers are not adequate for me, because I need to be able to install it, and run it without going through the "msdos classpath" thingy. I need a "wizard" type program that is truly for "dummies." Something that I can just put in my images and tell it what I want it to do IN PLAIN ENGLISH. For instance, if I want the "login button" to save the login information to a file and/or to the game. The players can have their same login info stored in a file, and they can return without creating a new name. The website service I want to place this on, doesn't allow chmoding for CGI, so I can't use that.
    </blockquote>
    This is a surely a joke. You honestly expect to get this for free. Even for an experienced programmer, to write 3/4 decent games - configure them to your network and meet these conditions. You're talking BIG or big-ish project here. As per your request, there is no such thing as point and click programming and there never ever will be.
    Use Macromedia Director. Closest thing you'll get to
    WYSIWYG programming. It's for simpletons and
    non-programmers.Ah, noooo. The shockwave games have been programmed in Lingo, which is quite powerful and much harder as a programming language than java (its also outdated, has some nasty featured and its a definite falling star). Flash gets a bit nearer with a point and click effort and you can do a surprising amount without knowing about programming, also as a media for the Internet its better supported than Shockwave and even java for the Web. But for any sort of worthwhile game need sprogramming knowledge.
    To conclude:
    you don't want to learn to program.
    noone is going to do this for you.
    You're a bit f***ed then aren't you.
    On a brighter note, if you pay me ?1,000.00 (half in advance), I'll think about it - solution in java or Flash, 3 games, ?1,500.00 for both. I can take it or leave it btw, couldn't give a sh*t either way.

  • Lost VB Programmer needs help

    Hi,
    I have created a JFrame with a JSplitPane and placed a JTree in the left side of the SplitPane. I made a class that populates the tree with a tree of options. When the user clicks the tree I want he right pane to change. The treemenu was an event listner that is working fine.
    The problem is the left pane is in a separate .java file called TreeMenu. On the JFrame I simply create a new instance of it and it populates the tree for me.
    As a VB programmer I would declare my TreeMenu to have an event such as MenuChanged("Selected Help"). The JFrame would see the message and call the right pane to update.
    How do I do this in Java? My problem occurs when I move code out to a separate class. If everything was done frm the one frame then I would be fine, but i want to modularise the application.
    Please help.
    Aaran

    Here's a bit of code that may help you with your modularity issues.
    File: Switchboard.java
    interface Switchboard {
        void operator(TreeData identity);
    }File: CallMaker.java
    import java.awt.event.*;
    public class CallMaker implements TreeSelectionListener {
        private TreeData identity;
        private Switchboard destination;
        CallMaker( TreeData id, Switchboard swbd ) {
            identity = id;
            destination = swbd;
        public void valueChanged( TreeSelectionEvent e ) {
            destination.operator( identity );
    }For what you're trying to do I would suggest the following:
    1)Declare the Tree Populator to implement the Switchboard interface.
    2)put the code that populates the table into the operator method, or
    simply call the class/method that populates the tree from the
    operator method.
    3)Use an instance of the CallMaker class as a Listener on your tree.
    It should work something like this:
    public class PanePopulator implements Switchboard;
    //Other code and whatnot...
       public void operator(TreeData td) {
          //Decide how to populate the right pane
          //based on the TreeData.  Call other classes/methods.
    }In a separate file...
    public class TreeSide {
       JTree tree = new JTree();
       //initialize the tree.
       TreeData treeInfo = new TreeData();
       PanePopulator rightPane = new PanePopulator();
       tree.addTreeSelectionListener(new CallMaker(treeInfo, rightPane));
       treeInfo = (TreeData)theCurrentTreeSelection;
    }as long as treeInfo contains the data you need to populate the right pane, you'll be fine.
    When a selection is made the CallMaker instance calls: rightPane.operator(treeInfo);
    This provides your rightPane instance with the information it needs to populate the rightPane.

  • Beginner Programmer needs help...

    I just have a quick question regarding the get(MINUTE) function in the Calendar class. I am using this to display the current time on a webpage, and every thing seems to work fine except that if the current time has the minutes < 10 (ie, 2:04 or 8:09, etc.) then only that single integer is displayed (2:4, 8:9). I understand why this is happening, but I was wondering if there is a simple way to add a leadign '0' to this int. Here is that section of code...
    int hour = cal.get(Calendar.HOUR);
    int minute = cal.get(Calendar.MINUTE);
    String ampm = (cal.get(Calendar.AM_PM) == 0 ? "AM" : "PM");
    %>
    <p class="body"> Hello <b><%= res.getString("fname") %> <%= res.getString("lname") %></b>.
    It is <b><%= hour+":"+minute+" "+ampm+" on "+mo+"/"+dt+"/"+yr %></b>.</p>
    This page is in JSP. Thanks a lot for the help!

    Replace minute with this. It should format it with a leading zero if needed
    new DecimalFormat("00").format(minute)

  • Beginning Programmer needs help - JSP and databases?

    1. I have never used JSP before, but have been given an assignment to create a webpage to query a database. The database is in Access. Does anyone have a snipet of code in JSP that will query an MS Access database. Is there a function that I can use and pass it an SQL (select statement) and have it return a list of results.
    -OR-
    If there is a way for JSP to transform the MS Access database into a text file that would be good also.
    2. Has anyone created a search functionaly using JSP (or know of a tool) that can search documents, PDF files, HTML files, etc.
    Thank you for any help!

    hi , there is no big deal in JSPs, Servlets, EJBs e.t.c its olnly a matter of committing time and getting urself familar and in areas where you have problems this forum is a nice place for you to share all what u have.
    to start with i will give you some sites where you can start learning jsps, servlets, ejbs and the rest.
    1) http://java.sun.com/j2ee -> look for JSPs , Servlets, EJB, JavaBeans e.t.c
    2) http://www.jspinsider.com
    3) http://www.coreservlets.com
    4) http://www.jakarta.apache.com (download tomcat for your container)
    for databases u can use this code snippet but u will have to read more about databases to be able to chagne some things in this snipper such as your database username, password , url and the rest.
         <%@page import="java.sql.*" %>
         try
            Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection con = DriverManager.getConnection ("jdbc:odbc:test_dsn", "sa", "");
         Statement stat = con.createStatement ();
         ResultSet res = stat.executeQuery("select * from authors");
         while (res.next())
              //process the results of this query
         catch (Exception e)
            //process this also
    %>
    You will need to become farmilar with the java programming language and also database conventions so you have a proper understanding.
    study those db codes and modify to suit your needs.
    buzz on me in case you are stuck.
    Regards

  • C++ programmer  needs help in Java.

    Greetings, I am new to Java after programming in C++ and am having a few troubles finding parallels to a few essential operations, such as:
    What are the Java equivalents to cout, cin and getch()?
    Or simply, how do you do output, get input from the user, and pause execution?
    Thank you all for any help you can offer.
    Dagkhi

    Look over this group of threads that a search of the Forum using "system.in" listed:
    http://search.java.sun.com/search/java/index.jsp?col=javaforums&qp=%2Bforum%3A54&qt=system.in&x=14&y=6

  • Newbie Java programmer needs help

    Everytime I go to run my program, I get the error
    "the class welcome.Welcome does not exist" and it's right, there is no such thing, nor will there ever be. There is a Welcome.class though, but it doesn't want to see it. Is there some setting I'm missing(i'm using Borland JBuilder 5 Personal) or is my code wrong. Here it is though, please help!
    import javax.swing.JOptionPane;
    public class Welcome
    public static void main( String args[] )
    JOptionPane.showMessageDialog(
    null, "Welcome to Java Programming" );
    System.exit( 0 );
    }

    Your code compiled and ran perfect on my machine.
    Your problem lays in either:
    1) your WYSIWYG (JBuilder or whatever)
    2) your class path
    I may be wrong. I have never used this program that you are talking about. but it seems to me that if you were able to get this program(IDE) running in the first place it should aready have some kind of JRE installed.
    You may wan't to just download the newest JDK if you don't already have it. Or try to locate the path for the command named "java" and try it like this:
    C:\whatever\path\it\is\java Welcome
    while in the same directory of the Welcome class.
    Hope this helps,
    Ian

  • Immature Java Programmer needs help...

    I do not want to generate html code inside my java code, rather open a html page by referencing it in my java code to see it in the browser. For example, here is my code:
    package mrpt;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    public class Login extends HttpServlet
         public void doGet(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException
              response.setContentType ("text/html");
              PrintWriter out = response.getWriter ();
              response.sendRedirect ("http://localhost:8080/Login.htm");
    The code compiles but when I open it in the browser (.\servlet\mrpt.Login) I get an error page "HTTP Status 500 -". I'm using the Tomcat Apache server. I have my html in the root directory and my .java and .class in the .\webapps\ROOT\WEB-INF\classes\mrpt. Can this be done? Is my code correct?

    I do not want to generate html code inside my java
    code, rather open a html page by referencing it in my
    java code to see it in the browser. For example, here
    is my code:
    package mrpt;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    public class Login extends HttpServlet
    public void doGet(HttpServletRequest request,
    HttpServletResponse response)
         throws ServletException, IOException
    I don't think this is right. try leaving it out ---          response.setContentType ("text/html");
              PrintWriter out = response.getWriter (); response.sendRedirect
    t ("http://localhost:8080/Login.htm");
    The code compiles but when I open it in the browser
    (.\servlet\mrpt.Login) I get an error page "HTTP
    Status 500 -". I'm using the Tomcat Apache server. I
    have my html in the root directory and my .java and
    .class in the .\webapps\ROOT\WEB-INF\classes\mrpt. Can
    this be done? Is my code correct?

  • C++ programmer needs help w/Java :)

    Hey,
    I'm working on a project and I'm supposed to write it in java. So I've been looking around and haven't been able to figure out exactly how input/output works. My main concern is the input function. I know that in C++ we use cin << and fin << to read in data from the command line or a file. How can I translate this to java code? I'm approaching this program as I would with a c++ program so I probably won't understand if you use html source code in your reply...yes engineers can be dumb...I'm living proof. Or if you could explain how I/O works in java I would apprecitate that as well.
    Thanks,
    Mayo

    I was wrong above. here is the way below.
    I don't know what I was thinkin earlier,
    well you know what you said engineers.:-)
    If there is any questions about the below
    code please feel free to ask.
    import java.io.*;
    public class ReadKeys
         public static void main(String args[])
            BufferedReader bread;
              try {
            bread = new BufferedReader(new InputStreamReader(System.in));
            String str;
            while( (str = bread.readLine()) != null  ) {
              System.out.println(str);
           }catch(IOException io) { }
    }

  • Warning this is very long code but i need help to see if I am on right trac

    I have done all the following code myself and it is the buisiness layer for my application. I have tried to follow recommendations on previous posts and I would like to be told where I can clean up my code and how? This is not complete and it looks very long to me but I need help in order to be better. There are 4 button vlivks and I have not completed them all. The criteria for application is that phonebook will accept new entries if they have names surnames and phone numbers that are not longer than 10 characters for display purposes but can change this. No duplicates are allowed. No editing of a existing entry must lead to a duplicate entry either. No new entry or edit may result in a new contact having no phone numbers.
    Many thanks for your time in advance,.....
    import javax.swing.JOptionPane;
    import java.util.ArrayList;
    public class Contact
    {// Start of the Contact class
         ArrayList<ContactDetails> phoneList = new ArrayList<ContactDetails>();          // To hold all the contacts
         ArrayList<ContactDetails> searchList = new ArrayList<ContactDetails>();          // To hold all contacts that return true on search
         ArrayList<ContactDetails> list = new ArrayList<ContactDetails>();
         String newName;                                                                                // To hold the new name
         String newSurname;                                                                           // to hold the new surname
         String newHome;                                                                                // To hold the new home number if any
         String newWork;                                                                                // To hold the new work number
         String newCell;                                                                                // To hold the new cell number
         final int MAX_LENGTH = 10;
         public boolean addToPhoneList;                                                            // Sets to false if there is an invalid entry
         public boolean addToSearchList;                                                            // Sets to false if there is an invlid search
         public boolean modifyContact;                                                            // Sets to false if there is an invalid modification
         // Method to create a new contact
         public void createNew()
         {// Start of create new()
              addToPhoneList = true;                                                                 // Set boolean to true each time the method is executed
              getNewContactsName();                                                                 // Get new name
              if(addToPhoneList == false)
                   createNew();
                   return;
              getNewContactsSurname();                                                            //Get new surname
              if(addToPhoneList == false)
                   createNew();
                   return;
              String checkName = newName;                                                            //Creates copies to be used in the checkIfDuplicate method
              String checkSurname = newSurname;
              addToPhoneList = checkIfDuplicate(checkName, checkSurname);                    //Check if the entries are duplicate
              if(addToPhoneList == false)
                   createNew();
                   return;
              getNewContactsHomeNum();                                                            // Get new home number
              if(addToPhoneList == false)
                   createNew();
                   return;
              getNewContactsWorkNum();                                                            // Get new work number
              if(addToPhoneList == false)
                   createNew();
                   return;
              getNewContactsCellNum();                                                            // Get new cell number
              if(addToPhoneList == false)
                   createNew();
                   return;
              checkAtLeastOneNumEntered();                                                       // Check that at least one phone number was entered
              if(addToPhoneList == true)
                   updateListWithNew();
         }// End of createNew()
         // Method to search for an existing contact
         public void searchExisting()
         {// Start of searchExisting()
              addToSearchList = true;                                                                 // Set the boolean true
              searchList.clear();                                                                      // Clear list from any previous searches
              if(phoneList.size() > 0)                                                            // Check if any contacts are in the list
                   getExistingDetailsAndSearch();                                                  // If there are entries then continue to search
              else
                   JOptionPane.showMessageDialog(null,"There are no contacts to search for. Please use this option when you have added a contact to the list.","Error",JOptionPane.ERROR_MESSAGE);
         }// End of searchExisting()
         // Method to modify an existing contact
         public void modifyExisting()
         {// Start of modifyExisting()
              modifyContact = true;                                                                 // Set the boolean to true
              if(phoneList.size() <= 0)                                                            // Check if the phonelist is not empty
                   JOptionPane.showMessageDialog(null,"There are no contacts to modify. Please use this option when there have been contacts added to the list.","Error",JOptionPane.ERROR_MESSAGE);
              else
                   getExistingDetailsAndModify();                                                  // If phonelist not emty continue to modify method
         }// End of modifyExisting()
         //Method to delete a contact from the list
         public void deleteExisting()
         //Method to get new contacts name
         public void getNewContactsName()
              newName = JOptionPane.showInputDialog("Please enter the new contacts name or press cancel to exit without saving.");
              if(newName == null)
                   finish();
              if(newName.trim().length()<=0)
                   JOptionPane.showMessageDialog(null,"You have not entered a name. Please try again.","Error",JOptionPane.ERROR_MESSAGE);
                   addToPhoneList = false;
                   return;
              addToPhoneList = checkLengthValid(newName, "name");
         //Method to get a new contacts surname
         public void getNewContactsSurname()
              newSurname = JOptionPane.showInputDialog("Please enter the new contacts surnname or press cancel to exit without saving.");
              if(newSurname == null)
                   finish();
              addToPhoneList = checkLengthValid(newSurname, "surname");
         //Method to get a new contacts home number
         public void getNewContactsHomeNum()
              newHome = JOptionPane.showInputDialog("Please enter the new contacts home number or press cancel to exit without saving.");
              if(newHome == null)
                   finish();
              if(newHome.trim().length() > 0)
                   try
                        Long homeNum = Long.parseLong(newHome);
                   catch(Exception e)
                        JOptionPane.showMessageDialog(null,"You may only use numbers for a valid phone number. Please try again.","Error",JOptionPane.ERROR_MESSAGE);
                        addToPhoneList = false;
                        return;
              addToPhoneList = checkLengthValid(newHome, "home number");
         //Method to get a new contacst work number
         public void getNewContactsWorkNum()
              newWork = JOptionPane.showInputDialog("Please enter the new contacts work number or press cancel to exit without saving");
              if(newWork == null)
                   finish();
              if(newWork.trim().length()> 0)
                   try
                        Long workNum = Long.parseLong(newWork);
                   catch(Exception e)
                        JOptionPane.showMessageDialog(null,"You may only use numbers for a valid number. Please try again.","Error",JOptionPane.ERROR_MESSAGE);
                        addToPhoneList = false;
                        return;
              addToPhoneList = checkLengthValid(newWork, "work number");
         //Method to get a new contacts cell number
         public void getNewContactsCellNum()
              newCell = JOptionPane.showInputDialog("Please enter the new contacts cell number or press cancel to exit without saving");
              if(newCell == null)
                   finish();
              if(newCell.trim().length() > 0)
                   try
                        Long cellNum = Long.parseLong(newCell);
                   catch(Exception e)
                        JOptionPane.showMessageDialog(null,"You may only use numbers for a valid number. Please try again.","Error",JOptionPane.ERROR_MESSAGE);
                        addToPhoneList = false;
                        return;
              addToPhoneList = checkLengthValid(newCell, "cell number");
         //Method to get the details for an existing contact
         public void getExistingDetailsAndSearch()
              String existingName = getExistingName("search for");
              if(existingName == null)
                   addToSearchList = false;
                   return;
              if(existingName.length()<=0)
                   JOptionPane.showMessageDialog(null,"You have not entered a name please try again","Error",JOptionPane.ERROR_MESSAGE);
                   addToSearchList = false;
                   searchExisting();
              String existingSurname = getExistingSurname();
                   if(existingSurname == null)
                        return;
              if(addToSearchList == true)
                   searchAndAddIfFound(existingName, existingSurname);
         //Method to get existing details and modify contact
         public void getExistingDetailsAndModify()
              String existingName = getExistingName("modify");
              if(existingName == null)
                   modifyContact = false;
                   return;
              if(existingName.length()<=0)
                   JOptionPane.showMessageDialog(null,"You have not entered a name please try again","Error",JOptionPane.ERROR_MESSAGE);
                   modifyContact = false;
                   modifyExisting();
              String existingSurname = getExistingSurname();
                   if(existingSurname == null)
                        return;
              if(modifyContact == true)
                   getContactBySearch(existingName.trim().toUpperCase(), existingSurname.trim().toUpperCase());
         //Method to get the contact from list and modify details
         public void getContactBySearch(String currentName, String currentSurname)
              int count = 0;
              int numFound = 0;
              for(ContactDetails cd: phoneList)
                   cd = phoneList.get(count);
                   if((cd.name.equals(currentName))&&(cd.surname.equals(currentSurname)))
                        numFound ++;
                        changeDetails(cd);
                   count ++;
              if(numFound <= 0)
                   JOptionPane.showMessageDialog(null,"No contacts matching the name and surname you entered found. Press the modify button to try again.","Information",JOptionPane.INFORMATION_MESSAGE);
         //Method to get existing contacts name
         public String getExistingName(String whatWasClicked)
              String name = JOptionPane.showInputDialog("Please enter the contacts name that you wish to "+whatWasClicked);
              return name;
         //Method to get an existing contacts surname
         public String getExistingSurname()
              String surname = JOptionPane.showInputDialog("Please enter the contacts surname.");
              return surname;
         //Method to change the details of contact
         public void changeDetails(ContactDetails conToChange)
              String currentName = conToChange.name;
              String currentSurname = conToChange.surname;
              String currentHome = conToChange.home;
              String currentWork = conToChange.work;
              String currentCell = conToChange.cell;
              String newNameForContact = getNewModName(currentName);
              if(modifyContact == false)
                   modifyExisting();
                   return;
              String newSurnameForContact = getNewModSurname(currentSurname);
              if(modifyContact == false)
                   modifyExisting();
                   return;
              String newHomeForContact = getNewModHome(currentHome);
              if(modifyContact == false)
                   modifyExisting();
                   return;
              String newWorkForContact = getNewModWork(currentWork);
              if(modifyContact == false)
                   modifyExisting();
                   return;
              String newCellForContact = getNewModCell(currentCell);
              if(modifyContact == false)
                   modifyExisting();
                   return;
              if(modifyContact == true)
                   conToChange.name = newNameForContact;
         //Method to get the modified name
         public String getNewModName(String currentName)
              String newModifiedName = JOptionPane.showInputDialog("Please enter the new name for contact or press cancel to keep it as is.");
              if(newModifiedName == null)
                   return currentName;
              if(newModifiedName.trim().length() <= 0)
                   JOptionPane.showMessageDialog(null,"You may not replace the existing name with a blank name. Please try again.","Error",JOptionPane.ERROR_MESSAGE);
                   modifyContact = false;
                   return currentName;
              modifyContact = checkLengthValid(newModifiedName, "modified name");
              return newModifiedName;
         //Method to get the modified surname
         public String getNewModSurname(String currentSurname)
              String newModifiedSurname = JOptionPane.showInputDialog("Please enter the new surname for the contact or press cancel to keep it as is.");
              if(newModifiedSurname == null)
                   return currentSurname;
              modifyContact = checkLengthValid(newModifiedSurname, "modified surname");
              if(modifyContact == false)
                   JOptionPane.showMessageDialog(null,"Surname not changed.","Information",JOptionPane.INFORMATION_MESSAGE);
                   return currentSurname;
              modifyContact = checkLengthValid(newModifiedSurname, "modified surname");
              return newModifiedSurname;
         //Method to search and update the list with a succesfull search
         private void searchAndAddIfFound(String name, String surname)
              int count = 0;
              int numFound = 0;
              for(ContactDetails cd: phoneList)
                   cd = phoneList.get(count);
                   if(cd.name.equals(name.trim().toUpperCase()))
                        numFound ++;
                        searchList.add(cd);
                   count ++;
              if(numFound <= 0)
                   JOptionPane.showMessageDialog(null,"No contacts were found matching the dat you entered.","Information",JOptionPane.INFORMATION_MESSAGE);
              else
                   list.clear();
                   list.addAll(searchList);
         //Method that check all entries are a valid logical length
         //Method is based on assumption that a normal name, surname, and phone numbers are not longer than 10 characters long.
         //IF This method is changed please change the layout in the GUI as this is also set to fit with the layout that gives a neat //apperance
         private boolean checkLengthValid(String detailEntered, String whatWasEntered)
              boolean validLength = true;
              if(detailEntered.trim().length() >= MAX_LENGTH)
                   JOptionPane.showMessageDialog(null,"The " +whatWasEntered+" you entered is too long. Please try again and use a "+whatWasEntered+" that is less than "+MAX_LENGTH+" characters long.","Error",JOptionPane.ERROR_MESSAGE);
                   validLength = false;
              return validLength;
         private void finish()
              System.exit(0);
         //Method to update the list with a new entry
         private void updateListWithNew()
              try
                   ContactDetails cd = new ContactDetails();
                   cd.name = newName.trim().toUpperCase();
                   cd.surname = newSurname.trim().toUpperCase();
                   cd.home = newHome.trim();
                   cd.work = newWork.trim();
                   cd.cell = newCell.trim();
                   phoneList.add(cd);
                   JOptionPane.showMessageDialog(null,"Contact succesfully entered. To save this change press exit to save or use the save option in the toolbar menu.","Information",JOptionPane.INFORMATION_MESSAGE);
              catch(Exception e)
                   JOptionPane.showMessageDialog(null,"Failed to add contact to list. If problem persists please contact the software developer.","Error",JOptionPane.ERROR_MESSAGE);
              list.clear();
              list.addAll(phoneList);
         //Method to check for duplicate
         public boolean  checkIfDuplicate(String nameToCheck, String surnameToCheck)
              int count = 0;
              boolean valid = true;
              for(ContactDetails cd : phoneList)
                   cd = phoneList.get(count);
                   if(((nameToCheck.trim().toUpperCase()).equals(cd.name))&&((surnameToCheck.trim().toUpperCase()).equals(cd.surname)))
                        JOptionPane.showMessageDialog(null,"You may not enter a duplicate contact. Please try again and change the name and surname.","Error",JOptionPane.ERROR_MESSAGE);
                        valid = false;
                        break;
                   count ++;
              return valid;
         //Method to check that at least one phone number exists for contact
         public void checkAtLeastOneNumEntered()
              if((newHome.trim().length()<=0)&&(newWork.trim().length()<=0)&&(newCell.trim().length()<=0))
                   JOptionPane.showMessageDialog(null,"You have not entered any phone number at all. You must enter at least one phone number for a new contact.","Error",JOptionPane.ERROR_MESSAGE);
                   addToPhoneList = false;
         //Method that returns the list to the GUI
         public ArrayList<ContactDetails> getList()
              return list;
    }

    Should I start over from scratch? Can I get help with links to tutorials on following? How to create a java CRUD application (google not useful) and how to layer in java(google not useful)
    This is my pres layer as is is this wrong too?
         Filename:     ContactsListInterface.java
         Date:           16 March 2008
         Programmer:     Yucca Nel
         Purpose:     Provides a GUI for entering names and contact numbers into a telephone directory.
                        Also allows options for searching for a specific name and deleting of data from the record
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.text.*;
    import java.io.*;
    import java.util.*;
    import java.text.*;
    public class Phonebook1 extends JFrame implements ActionListener
    { //start of class
         // construct fields, buttons, labels,text boxes, ArrayLists etc
         JTextPane displayPane = new JTextPane();
         JLabel listOfContacts = new JLabel("List Of Contacts");               // creates a label for the scrollpane
         JButton createButton = new JButton("Create");
         JButton searchButton = new JButton("Search");
         JButton modifyButton = new JButton("Modify");
         JButton deleteButton = new JButton("Delete");
         Contact c = new Contact();
         ArrayList<ContactDetails> contactList = c.getList();
         // create an instance of the ContactsListInterface
         public Phonebook1()
         { // start of cli()
              super("Phonebook Interface");
         } // end of cli()
         public JMenuBar createMenuBar()
         { // start of the createMenuBar()
              // construct and populate a menu bar
              JMenuBar mnuBar = new JMenuBar();                              // creates a menu bar
              setJMenuBar(mnuBar);
              JMenu mnuFile = new JMenu("File",true);                         // creates a file menu in the menu bar which is visible
                   mnuFile.setMnemonic(KeyEvent.VK_F);
                   mnuFile.setDisplayedMnemonicIndex(0);
                   mnuFile.setToolTipText("File Options");
                   mnuBar.add(mnuFile);
              JMenuItem mnuFileExit = new JMenuItem("Save And Exit");     // creates an exit option in the file menu
                   mnuFileExit.setMnemonic(KeyEvent.VK_X);
                   mnuFileExit.setDisplayedMnemonicIndex(1);
                   mnuFileExit.setToolTipText("Close Application");
                   mnuFile.add(mnuFileExit);
                   mnuFileExit.setActionCommand("Exit");
                   mnuFileExit.addActionListener(this);
              JMenu mnuEdit = new JMenu("Edit",true);                         // creates a menu for editing options
                   mnuEdit.setMnemonic(KeyEvent.VK_E);
                   mnuEdit.setDisplayedMnemonicIndex(0);
                   mnuEdit.setToolTipText("Edit Options");
                   mnuBar.add(mnuEdit);
              JMenu mnuEditSort = new JMenu("Sort",true);                    // creates an option for sorting entries
                   mnuEditSort.setMnemonic(KeyEvent.VK_S);
                   mnuEditSort.setDisplayedMnemonicIndex(0);
                   mnuEdit.add(mnuEditSort);
              JMenuItem mnuEditSortByName = new JMenuItem("Sort By Name");          // to sort entries by name
                   mnuEditSortByName.setMnemonic(KeyEvent.VK_N);
                   mnuEditSortByName.setDisplayedMnemonicIndex(8);
                   mnuEditSortByName.setToolTipText("Sort entries by first name");
                   mnuEditSortByName.setActionCommand("Name");
                   mnuEditSortByName.addActionListener(this);
                   mnuEditSort.add(mnuEditSortByName);
              JMenuItem mnuEditSortBySurname = new JMenuItem("Sort By Surname");     // to sort entries by surname
                   mnuEditSortBySurname.setMnemonic(KeyEvent.VK_R);
                   mnuEditSortBySurname.setDisplayedMnemonicIndex(10);
                   mnuEditSortBySurname.setToolTipText("Sort entries by surname");
                   mnuEditSortBySurname.setActionCommand("Surname");
                   mnuEditSortBySurname.addActionListener(this);
                   mnuEditSort.add(mnuEditSortBySurname);
              JMenu mnuHelp = new JMenu("Help",true);                                        // creates a menu for help options
                   mnuHelp.setMnemonic(KeyEvent.VK_H);
                   mnuHelp.setDisplayedMnemonicIndex(0);
                   mnuHelp.setToolTipText("Help options");
                   mnuBar.add(mnuHelp);
              JMenuItem mnuHelpHelp = new JMenuItem("Help");                              // creates a help option for help topic
                   mnuHelpHelp.setMnemonic(KeyEvent.VK_P);
                   mnuHelpHelp.setDisplayedMnemonicIndex(3);
                   mnuHelpHelp.setToolTipText("Help Topic");
                   mnuHelpHelp.setActionCommand("Help");
                   mnuHelpHelp.addActionListener(this);
                   mnuHelp.add(mnuHelpHelp);
              JMenuItem mnuHelpAbout = new JMenuItem("About");                         // creates a about option for info about api
                   mnuHelpAbout.setMnemonic(KeyEvent.VK_T);
                   mnuHelpAbout.setDisplayedMnemonicIndex(4);
                   mnuHelpAbout.setToolTipText("About this program");
                   mnuHelpAbout.setActionCommand("About");
                   mnuHelpAbout.addActionListener(this);
                   mnuHelp.add(mnuHelpAbout);
              return mnuBar;
         } // end of the createMenuBar()
         // create the content pane
         public Container createContentPane()
         { // start of createContentPane()
              //construct and populate panels and content pane
              JPanel labelPanel = new JPanel(); // panel is only used to put the label for the textpane in
                   labelPanel.setLayout(new FlowLayout());
                   labelPanel.add(listOfContacts);
              JPanel displayPanel = new JPanel();// panel is used to display all the contacts and thier numbers
                   setTabsAndStyles(displayPane);
                   displayPane = addTextToTextPane();
                   displayPane.setEditable(false);
              JScrollPane scrollPane = new JScrollPane(displayPane);
                   scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); // pane is scrollable vertically
                   scrollPane.setWheelScrollingEnabled(true);// pane is scrollable by use of the mouse wheel
                   scrollPane.setPreferredSize(new Dimension(400,320));
              displayPanel.add(scrollPane);
              JPanel workPanel = new JPanel();// panel is used to enter, edit and delete data
                   workPanel.setLayout(new FlowLayout());
                   workPanel.add(createButton);
                        createButton.setToolTipText("Create a new entry");
                        createButton.addActionListener(this);
                   workPanel.add(searchButton);
                        searchButton.setToolTipText("Search for an entry by name number or surname");
                        searchButton.addActionListener(this);
                   workPanel.add(modifyButton);
                        modifyButton.setToolTipText("Modify an existing entry");
                        modifyButton.addActionListener(this);
                   workPanel.add(deleteButton);
                        deleteButton.setToolTipText("Delete an existing entry");
                        deleteButton.addActionListener(this);
              labelPanel.setBackground(Color.red);
              displayPanel.setBackground(Color.red);
              workPanel.setBackground(Color.red);
              // create container and set attributes
              Container c = getContentPane();
                   c.setLayout(new BorderLayout(30,30));
                   c.add(labelPanel,BorderLayout.NORTH);
                   c.add(displayPanel,BorderLayout.CENTER);
                   c.add(workPanel,BorderLayout.SOUTH);
                   c.setBackground(Color.red);
              // add a listener for the window closing and save
              addWindowListener(
                   new WindowAdapter()
                        public void windowClosing(WindowEvent e)
                             int answer = JOptionPane.showConfirmDialog(null,"Are you sure you would like to save all changes and exit?","File submission",JOptionPane.YES_NO_OPTION);
                             if(answer == JOptionPane.YES_OPTION)
                                  System.exit(0);
              return c;
         } // end of createContentPane()
         protected void setTabsAndStyles(JTextPane displayPane)
         { // Start of setTabsAndStyles()
              // set Font style
              Style fontStyle = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
              Style regular = displayPane.addStyle("regular", fontStyle);
              StyleConstants.setFontFamily(fontStyle, "SansSerif");
              Style s = displayPane.addStyle("bold", regular);
              StyleConstants.setBold(s,true);
         } // End of setTabsAndStyles()
         public JTextPane addTextToTextPane()
         { // start of addTextToTextPane()
              int numberOfEntries = contactList.size();
              int count = 0;
              Document doc = displayPane.getDocument();
              try
              { // start of tryblock
                   // clear previous text
                   doc.remove(0,doc.getLength());
                   // insert titles of columns
                   doc.insertString(0,"NAME\tSURNAME\tHOME NO\tWORK NO\tCELL NO\n",displayPane.getStyle("bold"));
                   for(ContactDetails cd : contactList)
                        cd = contactList.get(count);
                        doc.insertString(doc.getLength(),cd.name+"\t"+cd.surname+"\t"+cd.home+"\t"+cd.work+"\t"+cd.cell+"\n",displayPane.getStyle("regular"));
                        count ++;
              } // end of try block
              catch(BadLocationException ble)
              { // start of ble exception handler
                   System.err.println("Could not insert text.");
              } // end of ble exception handler
              return displayPane;
         } // end of addTextToTextPane()
         // code to process user clicks
         public void actionPerformed(ActionEvent e)
         { // start of actionPerformed()
              String arg = e.getActionCommand();
              // user clicks create button
              if(arg.equals("Create"))
                   c.createNew();                                                  // method to create a new Contact
                   addTextToTextPane();
              if(arg.equals("Search"))
                   c.searchExisting();                                             // method to search for an existing entry
                   addTextToTextPane();
              if(arg.equals("Modify"))
                   c.modifyExisting();                                             // method to modify contact
                   addTextToTextPane();
              if(arg.equals("Delete"))
                   c.deleteExisting();
                   addTextToTextPane();
              if(arg.equals("Exit"))
         } // end of actionPerformed()
         // method to create a new contact
         public static void main(String[] args)
         { // start of main()
              // Set look and feel of interface
              try
              { // start of try block
                   UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
              } // end of try block
              catch(Exception e)
              { // start of catch block
                   JOptionPane.showMessageDialog(null,"There was an error in setting the look and feel of this application","Error",JOptionPane.INFORMATION_MESSAGE);
              } // end  of catch block
              Phonebook1 pb = new Phonebook1();
              pb.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
              pb.setJMenuBar(pb.createMenuBar());
              pb.setContentPane(pb.createContentPane());
              pb.setSize(520,500);
              pb.setVisible(true);
              pb.setResizable(false);
         } // end of main()
    } //end of class

  • Need help with project

    Hi all I'm working on a project and need help.
    I want the "New" button to clear all the fields.
    Any help?
    =======================================================
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class Message extends JFrame implements ActionListener {
         public Message() {
         super("Write a Message - by Kieran Hannigan");
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setSize(370,270);
         FlowLayout flo = new FlowLayout(FlowLayout.RIGHT);
         setLayout(flo);
         //Make the bar
         JMenuBar bar = new JMenuBar();
         //Make "File" on Menu
         JMenu File = new JMenu("File");
         JMenuItem f1 = new JMenuItem("New");
         JMenuItem f2 = new JMenuItem("Open");
         JMenuItem f3 = new JMenuItem("Save");
         JMenuItem f4 = new JMenuItem("Save As");
         JMenuItem f5 = new JMenuItem("Exit");
         File.add(f1);
         File.add(f2);
         File.add(f3);
         File.add(f4);
         File.add(f5);
         bar.add(File);
         //Make "Edit" on menu
         JMenu Edit = new JMenu("Edit");
         JMenuItem e1 = new JMenuItem("Cut");
         JMenuItem e2 = new JMenuItem("Paste");
         JMenuItem e3 = new JMenuItem("Copy");
         JMenuItem e4 = new JMenuItem("Repeat");
         JMenuItem e5 = new JMenuItem("Undo");
         Edit.add(e5);
         Edit.add(e4);
         Edit.add(e1);
         Edit.add(e3);
         Edit.add(e2);
         bar.add(Edit);
         //Make "View" on menu
         JMenu View = new JMenu("View");
         JMenuItem v1 = new JMenuItem("Bold");
         JMenuItem v2 = new JMenuItem("Italic");
         JMenuItem v3 = new JMenuItem("Normal");
         JMenuItem v4 = new JMenuItem("Bold-Italic");
         View.add(v1);
         View.add(v2);
         View.add(v3);
         View.addSeparator();
         View.add(v4);
         bar.add(View);
         //Make "Help" on menu
         JMenu Help = new JMenu("Help");
         JMenuItem h1 = new JMenuItem("Help Online");
         JMenuItem h2 = new JMenuItem("E-mail Programmer");
         Help.add(h1);
         Help.add(h2);
         bar.add(Help);
         setJMenuBar(bar);
         //Make Contents of window.
         //Make "Subject" text field
         JPanel row2 = new JPanel();
         JLabel sublabel = new JLabel("Subject:");
         row2.add(sublabel);
         JTextField text2 = new JTextField("RE:",24);
         row2.add(text2);
         //Make "To" text field
         JPanel row1 = new JPanel();
         JLabel tolabel = new JLabel("To:");
         row1.add(tolabel);
         JTextField text1 = new JTextField(24);
         row1.add(text1);
         //Make "Message" text area
         JPanel row3 = new JPanel();
         JLabel Meslabel = new JLabel("Message:");
         row3.add(Meslabel);
         JTextArea text3 = new JTextArea(6,22);
         messagearea.setLineWrap(true);
         messagearea.setWrapStyleWord(true);
         JScrollPane scroll = new JScrollPane(text3,
                                  JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                                  JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
         row3.add(scroll);
         add(row1);
         add(row2);
         add(row3);
         setVisible(true);
         public static void main(String[] arguments)  {
         Message Message = new Message();
    }

    Ok, given that I may have not been the kindest to you on the other thread (and I'm still annoyed that you went and cross-posted this), and that you did actually use code tags, I'm going to post some code here:
    Please take the following advice onboard though.
    1. When you are naming your artifacts, please use the java coding standard as your guide. So if you are naming a class you use a capital letter first, and use camel case thereafter. All method names begin with a lower case letter, and all variable names begin with a lower case letter (and again camel case after that)
    2. Please use self explanitory names (for everything), so no more row1, row2, or text1, text2, etc.
    3. The example I am giving below makes use of a single class to handle all actions, this is not really the best way to do this, and a better way would be to have a class to handle each action (that would remove the massive if() else if() in the action handler class.
    4. When you are using class variables they should be private (no exceptions, ever!), if you need to access them from other classes use accessors (eclipse and other IDE tools can generate these methods for you in seconds)
    5. Notice the naming convention for my constants (final statics), they are all upper case (again from the java coding standards document, which you are going to look for with google right?)
    6. I have hived some of the creation work to helper methods (the getSubjectTextField() etc), although it isn't advisable to be calling other methods from the constructor, since this is a GUI, and you want it to appear as soon as you create the class, we won't worry about this, but perhaps as an execrise you could work out a better way to do this?
    7. Personally, I don't like classes that implement listeners, unless they are specifically designed to do that job. So a Frame that is set up as an action listener is fine, provided the actions it listens for are associated with the frame, not its contents. If the actions are related to its contents, then a dedicated class is better.
    8. Another personal opinion, but I feel it makes code clearer, but others may disagree. If you are creating a variable solely to hold the result of a calculation, to be passed to a method in the very next line, then don't create the variable, just pass the method as the argument to the method (feel free to ignore this advice if the method call is extremely long, and a local would make it easier to read)
    Anyway, here is the code. I have removed most of the menu items, and leave this as an exercise for you. Also I have only created 2 methods (new and exit), I'll again leave it as an exercise for you to complete this.
    package jdc;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import javax.swing.AbstractAction;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.ScrollPaneConstants;
    public class Message extends JFrame {
        /** Constant for the new action command. */
        private static final String NEW_COMMAND = "New";
        /** Constant for the exit action command. */
        private static final String EXIT_COMMAND = "Exit";
        /** Subject text field. */
        private JTextField subjectTextField;
        /** Recipient text field. */
        private JTextField toTextField;
        /** Message text area. */
        private JTextArea messageTextArea;
        public Message() {
            super("Write a Message - by Kieran Hannigan");
            setSize(370, 270);
            FlowLayout flo = new FlowLayout(FlowLayout.RIGHT);
            setLayout(flo);
            setJMenuBar(createMenuBar());
            // Add "Subject" text field
            JPanel subjectRow = new JPanel();
            subjectRow.add(new JLabel("Subject:"));
            subjectRow.add(getSubjectTextField());
            // Add "To" text field
            JPanel toRow = new JPanel();
            toRow.add(new JLabel("To:"));
            toRow.add(getToTextField());
            // Make "Message" text area
            JPanel messageRow = new JPanel();
            JScrollPane scroll = new JScrollPane(getMessageTextArea(), ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
                    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
            messageRow.add(scroll);
            add(toRow);
            add(subjectRow);
            add(messageRow);
            setVisible(true);
         * Clear all the fields.
        public void createNewMessage() {
            getSubjectTextField().setText("");
            getToTextField().setText("");
            getMessageTextArea().setText("");
         * Exit the application.
        public void exitApplication() {
            if (JOptionPane.showConfirmDialog(this, "Are you sure you would like to exit now?", "Exit",
                    JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
                System.exit(0);
         * @return The subject text field, (creates a new one if it doesn't already exist)
        private JTextField getSubjectTextField() {
            if (this.subjectTextField == null) {
                this.subjectTextField = new JTextField("RE:", 24);
            return this.subjectTextField;
         * @return The to text field, (creates a new one if it doesn't already exist)
        private JTextField getToTextField() {
            if (this.toTextField == null) {
                this.toTextField = new JTextField(24);
            return this.toTextField;
         * @return The message text area, (creates a new one if it doesn't already exist
        private JTextArea getMessageTextArea() {
            if (this.messageTextArea == null) {
                this.messageTextArea = new JTextArea(6, 22);
                this.messageTextArea.setLineWrap(true);
                this.messageTextArea.setWrapStyleWord(true);
            return this.messageTextArea;
         * Helper method to create the menu bar.
         * @return Menu bar with all menus and menu items added
        private JMenuBar createMenuBar() {
            JMenuBar bar = new JMenuBar();
            JMenu fileMenu = new JMenu("File");
            fileMenu.add(new JMenuItem(new MenuItemAction(this, NEW_COMMAND)));
            fileMenu.add(new JMenuItem(new MenuItemAction(this, EXIT_COMMAND)));
            bar.add(fileMenu);
            // TODO add all other menu's and menu items here....
            return bar;
         * Private static class to handle all menu item actions.
        private static class MenuItemAction extends AbstractAction {
            /** Instance of the message class. */
            private Message message;
             * @param actionName
            public MenuItemAction(Message messageFrame, String actionName) {
                super(actionName);
                this.message = messageFrame;
             * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
            public void actionPerformed(ActionEvent e) {
                if (e.getActionCommand().equals(NEW_COMMAND)) {
                    this.message.createNewMessage();
                } else if (e.getActionCommand().equals(EXIT_COMMAND)) {
                    this.message.exitApplication();
                // TODO Add the other event handlers here
        public static void main(String[] arguments) {
            Message messageFrame = new Message();
            messageFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }If you have any questions, please let me know, as there are a number of new areas introduced that you may not have come across before.

  • I'm trying to change my ICloud e-mail to match the one associated with the Apple ID? Can someone tell me how to do this? Seems like the phone won't accept the new one, the message states "you already have acct associated....."  (a given!!)  I need help !!

    I'm trying to change my ICloud e-mail to match the one associated with the Apple ID? Can someone tell me how to do this? Seems like the phone won't accept the new one, the message states "you already have acct associated....."  (a given!!)  I need help !!

    You made a purchase and exhausted the credit on your card before it processed. All purchases are final. Contact iTunes Store support. You need to settle up before you can purchase or download anything else.

  • Need help with installing Yahoo style flash menu CS5

    I downloaded the Yahoo style menu bar from the the available widgets.  I got the menu bar to show in Dreamweaver, but need help:
    I have trouble understanding how to use the f-source  flash editor to edit the links.
    I don't seem to be able to drop the  f-source.com button from the menu bar.
    The bar  shows up as a tiny bar in IE8, not as I had programmed it in the widget programmer.
    I was instructed to Insert ==> f-source menus ==> Edit menu in Dreamweaver.  Doing this leads to the following message: "Install at least one f-source menu'.  I did install the f-source-UI G file in the Adobe Extension Manager CS5.  What else needs to be installed?  
    My OS is Windows7 and I am working with Dreamweaver CS5.  Please help.
    Thanks,
    Tony Uythoven

    Flash menus (Flash navigation, period) is a terrible thing from a functional standpoint. It looks really nice, but the honeymoon ends there. As far as SEO goes, your entire site, beyond the landing page, is invisible. A search robot will only see an embeded Flash object.
    You have to ask yourself a basic question.
    1. What is the purpose of building a website and putting it online?
    If it's for your own personal enjoyment and nothing more, then a Flash menu may be for you. If it's for a business or band, or a political group or social group, and you want people to be able to find it in Google, Yahoo, Bing, etc. then you want as many indexible links as possible on your landing page so they will show up in related searches like schedules, articles, galleries, etc.

  • Need help with connecting file inputs to arrays

    In this assignment I have a program that will do the following: display a list of names inputed by the user in reverse order, display any names that begin with M or m, and display any names with 5 or more letters. This is all done with arrays.
    That was the fun part. The next part requires me to take the names from a Notepad file, them through the arrays and then output them to a second Notepad file.
    Here is the original program: (view in full screen so that the code doesn't get jumbled)
    import java.io.*;       //Imports the Java library
    class progB                    //Defines class
        public static void main (String[] arguments) throws IOException
            BufferedReader keyboard;                                  //<-
            InputStreamReader reader;                                 //  Allows the program to
            reader = new InputStreamReader (System.in);               //  read the the keyboard
            keyboard = new BufferedReader (reader);                  //<-
            String name;                 //Assigns the name variable which will be parsed into...
            int newnames;               //...the integer variable for the amount of names.
            int order = 0;              //The integer variable that will be used to set the array size
            String[] array;             //Dynamic array (empty)
            System.out.println (" How many names do you want to input?");   //This will get the number that will later define the array
            name = keyboard.readLine ();
            newnames = Integer.parseInt (name);                                         // Converts the String into the Integer variable
            array = new String [newnames];                                               //This defines the size of the array
            DataInput Imp = new DataInputStream (System.in);       //Allows data to be input into the array
            String temp;                                       
            int length;                                                                  //Defines the length of the array for a loop later on
                for (order = 0 ; order < newnames ; order++)                                //<-
                {                                                                           //  Takes the inputed names and
                    System.out.println (" Please input name ");                            //  gives them a number according to
                    temp = keyboard.readLine ();                                           //  the order they were inputed in
                    array [order] = temp;                                                  //<-
                for (order = newnames - 1 ; order >= 0 ; order--)                                //<-
                {                                                                                //  Outputs the names in the reverse 
                    System.out.print (" \n ");                                                   //  order that they were inputed
                    System.out.println (" Name " + order + " is " + array [order]);             //<-
                for (order = 0 ; order < newnames ; order++)                                  //<-
                    if (array [order].startsWith ("M") || array [order].startsWith ("m"))     //  Finds and outputs any and all
                    {                                                                         //  names that begin with M or m
                        System.out.print (" \n ");                                            //
                        System.out.println (array [order] + (" starts with M or m"));         //
                    }                                                                         //<-
                for (order = 0 ; order < newnames ; order++)                                            //<-
                    length = array [order].length ();                                                   //
                    if (length >= 5)                                                                    //  Finds and outputs names
                    {                                                                                  //  with 5 or more letters
                        System.out.print (" \n ");                                                      //
                        System.out.println ("Name " + array [order] + " have 5 or more letters ");      //<-
    }The notepad file contains the following names:
    jim
    laruie
    tim
    timothy
    manny
    joseph
    matty
    amanda
    I have tried various methods but the one thing that really gets me is the fact that i can't find a way to connect the names to the arrays. Opening the file with FileInputStream is easy enough but using the names and then outputing them is quite hard. (unless i'm thinking too hard and there really is a simple method)

    By "connect", do you just mean you want to put the names into an array?
    array[0] = "jim"
    array[1] = "laruie"
    and so on?
    That shouldn't be difficult at all, provided you know how to open a file for reading, and how to read a line of text from it. You can just read the line of text, put it in the array position you want, until the file is exhausted. Then open a file for writing, loop through the array, and write a line.
    What part of all that do you need help with?

  • Need help in ABAP.

    HI gurus,
    I AM KISHORE i am SD consultant.here my client is asking to create some programmes. i need help in simple programmes so that as per that i can change the fiels as per my requirement.
          i am in real big problem now .i know these are very simple programmes but i don't know ABC of programming.
    can some one help me in this regard.  this ABAP help is needed for me only for some time.
    the requirement:  
    create program which will produce list with:
       Materia number; Material description ; Valuation class, Standard price with curency and unit.
    Select conditions:
       Material number,
       Plant,
       Material type                                as mandatory
       Material Group                              as mandatory,
       LP/KD/MIP  (LABOR)                    as mandatory,
       Replenishment strategy (TEMPB)   as mandatory,
       Valuation class,
       Flag for deletion-Client Level  with initial value <> ‘X’  (only materials without flag for deletion)
    Simple List is enough
    reagrds
    kishore

    Hi
    Eventhough i cant fullfill your complete requirement. I'm giving u a report performed by me in which most of the fields are covered ask any of abaper to make modifications in this report and change it to accordingly ur requirement. I think it will solve 80% of ur work
    * tables
    TABLES: ekko,ekbe,ekpo,ekkn,konh,konv,esll,ekbz,rseg,lfa1,j_1ipart1,
    j_1igrxref.
    TYPE-POOLS: slis.
    *data definituon
    DATA:
          wa_ekko LIKE ekko,
          wa_ekbe LIKE ekbe,
          wa_ekkn LIKE ekkn,
          wa_konp LIKE konp,
          wa_ekpo LIKE ekpo,
          wa_rbkp LIKE rbkp,
          wa_j_1ipart1 LIKE j_1ipart1,
          wa_j_1igrxref LIKE j_1igrxref,
          wa_rseg LIKE rseg OCCURS 0 WITH HEADER LINE.
    DATA: ws_vakey LIKE konh-vakey,
          ws_kbetr LIKE konp-kbetr,
          ws_kbetr1 LIKE konp-kbetr,
          ws_kbetr2 LIKE konp-kbetr,
          ws_ecs LIKE j_1igrxref-ecs,
          ws_ebelp LIKE ekbz-ebelp,
          ws_ebeln LIKE ekko-ebeln,
          ws_belnr LIKE ekbe-belnr,
          ws_beznk LIKE  rbkp-beznk,
          ws_wrbtr_f LIKE ekbz-wrbtr,
          ws_rmwwr LIKE rbkp-rmwwr,
          ws_rbkp_benz.
    *internal tables
    DATA: BEGIN OF int_outtab OCCURS 0,
          lifnr      LIKE ekko-lifnr,               " vend no
          name1      LIKE lfa1-name1,               " vend name
          werks      LIKE ekpo-werks,               "  plant
          ebeln      LIKE ekko-ebeln,               " po no
          knumv      LIKE ekko-knumv,
          ebelp      LIKE ekbe-ebelp,
          matnr      LIKE ekpo-matnr,               " mat no
          txz01      LIKE ekpo-txz01,               " mat desceiption
          kostl      LIKE ekkn-kostl,               " cost center
          ps_psp_pnr LIKE ekkn-ps_psp_pnr,          " WBS element
          netwr      LIKE ekpo-netwr,
          " basic value           (po)
          kbetr      LIKE konp-kbetr,
          " excise value          (po)
          kwert_i    LIKE konv-kwert,
          " insurance value       (po)
          kwert_f    LIKE konv-kwert,
          " frieght value         (po)
          kwert_t    LIKE konv-kwert,
          " vat/tax value         (po)
          kwert_o    LIKE konv-kwert,
          " others                (po)
          kwert_total LIKE konv-kwert,
          " total                 (po)
          ecs        LIKE j_1igrxref-ecs,
          " excise                (ap)
          wmwst1     LIKE   rbkp-wmwst1,
          " tax amount            (ap)
          wrbtr_f       TYPE ekbz-wrbtr,
          " freight               (ap)
          wrbtr       TYPE ekbz-wrbtr,
          beznk      LIKE    rbkp-beznk,
          " Unplanned cost        (ap)
          refwr_g    TYPE  ekbe-refwr,
          " gross                 (ap)
          rmwwr   LIKE  rbkp-rmwwr,
          "  Actual Invoice Total (ap)
          buzei      LIKE ekbz-buzei,               "item for material doc
          gjahr      LIKE ekbe-gjahr,
          tax        LIKE ekbe-wrbtr,                " tax (ap)
          actual_total LIKE ekbe-wrbtr,
    *      belnr      LIKE rseg-belnr,
           belnr     LIKE ekbe-belnr,
          vakey      LIKE konh-vakey,
          cpudt      LIKE ekbe-cpudt,
          budat      LIKE ekbz-budat,
          belnr_ekbz LIKE ekbz-belnr,              "to get excise value
    *      aedat     LIKE ekpo-aedat,
          bedat   LIKE ekko-bedat,
          waers     LIKE lfm1-waers,               " currency
          END OF int_outtab.
    DATA:   int_konv LIKE konv OCCURS 0 WITH HEADER LINE,
    *        int_ekbe LIKE ekbe OCCURS 0 WITH HEADER LINE,
            int_ekbz LIKE ekbz OCCURS 0 WITH HEADER LINE.
    DATA: BEGIN OF int_konh OCCURS 0,
          knumh LIKE konh-knumh,
          kschl LIKE konh-kschl,
          vakey LIKE konh-vakey,
          END OF int_konh.
    DATA: BEGIN OF int_konp OCCURS 0,
          knumh LIKE konp-knumh,
          kschl LIKE konp-kschl,
          kbetr LIKE konp-kbetr,
          END OF int_konp.
    DATA: BEGIN OF int_ekkn OCCURS 0,
          ebeln      LIKE ekkn-ebeln,
          ebelp      LIKE ekkn-ebelp,
          kostl      LIKE ekkn-kostl,
          ps_psp_pnr LIKE ekkn-ps_psp_pnr,
          END OF int_ekkn.
    DATA: BEGIN OF int_outtab1 OCCURS 0,
          exbed      LIKE j_1igrxref-exbed,
          ecs        LIKE j_1igrxref-ecs,
          END OF int_outtab1.
    DATA: BEGIN OF int_ekbe OCCURS 0,
          ebelp LIKE ekbe-ebelp,
          refwr LIKE ekbe-refwr,
          wrbtr LIKE ekbe-wrbtr,
          shkzg LIKE ekbe-shkzg,
          END OF int_ekbe.
    DATA: BEGIN OF int_total OCCURS 0,
          ebeln LIKE ekko-ebeln,
          ebelp LIKE ekbe-ebelp,
          actual_total LIKE ekbe-wrbtr,
          END OF int_total.
    DATA: BEGIN OF int_excise OCCURS 0,
          ebeln      LIKE ekko-ebeln,
          kbetr      LIKE konp-kbetr,
          END OF int_excise.
    DATA: BEGIN OF int_rseg OCCURS 0,
          ebeln LIKE rseg-ebeln,
          ebelp LIKE rseg-ebelp,
          lfbnr LIKE rseg-lfbnr,
          matnr LIKE rseg-matnr,
          lfgja LIKE rseg-lfgja,
          belnr LIKE rseg-belnr,
          ecs LIKE j_1igrxref-ecs,
          beznk      LIKE    rbkp-beznk,
          wrbtr_f    LIKE  ekbz-wrbtr,
          rmwwr LIKE rbkp-rmwwr,
          END OF int_rseg.
    DATA: BEGIN OF int_rbkp OCCURS 0,
          belnr LIKE  rbkp-belnr,
          beznk      LIKE    rbkp-beznk,
          rmwwr      LIKE    rbkp-rmwwr,
          tcode  LIKE rbkp-tcode,
          END OF int_rbkp.
    ****ALV list definintion
    DATA: ws_cat TYPE slis_t_fieldcat_alv ,
          int_cat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
    DATA: g_container TYPE scrfname VALUE 'BCALV_GRID_DEMO_0100_CONT1',
          g_custom_container TYPE REF TO cl_gui_custom_container.
    *selection-screen
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    SELECTION-SCREEN SKIP 2.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 19(23) text-002.
    SELECT-OPTIONS: s_lifnr FOR ekko-lifnr obligatory.
    *PARAMETERS:p_lifnr LIKE ekko-lifnr  .
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 25(17) text-006.
    *PARAMETERS:p_ebeln LIKE ekko-ebeln obligatory.
    SELECT-OPTIONS:s_ebeln FOR ekko-ebeln .
    SELECTION-SCREEN END OF LINE.
    *SELECTION-SCREEN BEGIN OF LINE.
    *SELECTION-SCREEN COMMENT 25(23) text-003.
    *PARAMETERS:p_ekorg LIKE ekko-ekorg.
    *SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    *SELECTION-SCREEN COMMENT 25(20) text-004.
    *PARAMETERS:p_werks LIKE ekpo-werks obligatory.
    *SELECT-OPTIONS: S_werks FOR ekpo-werks obligatory.
    SELECTION-SCREEN END OF LINE.
    *SELECTION-SCREEN BEGIN OF LINE.
    *SELECTION-SCREEN COMMENT 25(23) text-005.
    *SELECT-OPTIONS:s_bedat FOR ekko-bedat.
    *SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK b1.
    START-OF-SELECTION.
      PERFORM get_data.
      PERFORM field_catalog.
      PERFORM display_data.
    END-OF-SELECTION.
    *&      Form  get_data
    *       text
    FORM get_data.
    * start of Vender details
    ***vender no, vender name, po no,service/mat no, service/mat description
      SELECT  ekko~lifnr ekko~ebeln ekko~knumv ekko~bedat
              ekpo~werks ekpo~matnr ekpo~txz01 ekpo~werks
              ekpo~netwr
    *          ekpo~aedat
              ekbe~ebelp  ekbe~belnr
              lfa1~name1
      INTO    CORRESPONDING   FIELDS OF  TABLE int_outtab
      FROM ( ( ( ekko
               JOIN ekbe ON  ekbe~ebeln = ekko~ebeln AND
                             ekbe~vgabe = '2'       )
               JOIN ekpo ON ekpo~ebeln = ekko~ebeln   AND
                            ekpo~ebelp = ekbe~ebelp )
               JOIN lfa1 ON lfa1~lifnr = ekko~lifnr )
      WHERE
    *  ekko~lifnr  =  P_lifnr  AND
    *         ekko~ebeln IN  S_ebeln  AND
    **         ekpo~werks IN  S_werks AND
             ekbe~vgabe = '2'.
    ***WBS/Cost center
      SELECT  ebeln ebelp kostl ps_psp_pnr  FROM ekkn INTO int_ekkn
      FOR ALL ENTRIES IN int_outtab
      WHERE ebeln = int_outtab-ebeln AND
            ebelp = int_outtab-ebelp.
        APPEND int_ekkn.
      ENDSELECT.
      LOOP AT int_outtab.
        ON CHANGE OF int_outtab-ebeln OR int_outtab-ebelp.
          LOOP AT int_ekkn WHERE ebeln = int_outtab-ebeln AND
                                 ebelp = int_outtab-ebelp.
            IF  int_ekkn-kostl <> ' '.
              MOVE int_ekkn-kostl TO int_outtab-kostl.
            ELSE.
              MOVE int_ekkn-ps_psp_pnr TO int_outtab-kostl.
              " int_outtab-ps_psp_pnr.
            ENDIF.
          ENDLOOP.
          MODIFY int_outtab.
        ENDON.
      ENDLOOP.
    *end of Vender details*****
    *******Start of calculation of PO
    *****Excise calculation of po
      LOOP AT int_outtab.
        CONCATENATE int_outtab-werks int_outtab-lifnr int_outtab-matnr INTO
        ws_vakey.
        MOVE ws_vakey TO int_outtab-vakey.
        MODIFY int_outtab.
      ENDLOOP.
      LOOP AT int_outtab.
    *    ON CHANGE OF int_outtab-ebeln OR int_outtab-vakey.
        ON CHANGE OF int_outtab-ebelp.
          SELECT knumh kschl vakey FROM konh INTO int_konh
    *        FOR ALL ENTRIES IN int_outtab
            WHERE vakey = int_outtab-vakey AND
                  datab <= int_outtab-bedat AND
                  datbi > int_outtab-bedat AND
                 ( kschl = 'JMOP' OR kschl = 'JEC1' ).
            SELECT knumh kschl kbetr FROM konp INTO int_konp
            WHERE  knumh = int_konh-knumh .
              IF  int_konp-kschl = 'JMOP'.
                ws_kbetr = int_konp-kbetr / 1000 * int_outtab-netwr.
                ws_kbetr1 = ws_kbetr.
              ENDIF.
              IF int_konp-kschl = 'JEC1'.
                ws_kbetr2 = int_konp-kbetr / 1000 * ws_kbetr1.
              ENDIF.
              ws_kbetr = ws_kbetr + ws_kbetr2.
            ENDSELECT.
          ENDSELECT.
        ENDON.
    *    ENDON.
        MOVE ws_kbetr TO int_outtab-kbetr.
        MODIFY int_outtab.
        CLEAR: ws_kbetr, ws_kbetr1, ws_kbetr2.
      ENDLOOP.
      LOOP AT int_outtab.
    *    ON CHANGE OF int_outtab-ebeln OR int_outtab-vakey.
        int_excise-kbetr =  int_outtab-kbetr.
        int_excise-ebeln =  int_outtab-ebeln.
        APPEND int_excise.
    *    ENDON.
      ENDLOOP.
      LOOP AT int_outtab.
        ON CHANGE OF int_outtab-ebeln.
          LOOP AT int_excise WHERE ebeln = int_outtab-ebeln.
            ws_kbetr = ws_kbetr + int_excise-kbetr.
          ENDLOOP.
        ENDON.
        int_outtab-kbetr = ws_kbetr.
        MODIFY int_outtab.
        CLEAR ws_kbetr.
      ENDLOOP.
    ***** Insurance, Freight,Vat/ST, Other, Total***********
      LOOP AT int_outtab.
        ON CHANGE OF int_outtab-ebelp OR int_outtab-ebeln.
          CLEAR int_konv.
          SELECT * FROM konv INTO CORRESPONDING FIELDS OF int_konv
          WHERE knumv = int_outtab-knumv AND
                kposn = int_outtab-ebelp AND
              ( ( kschl <> 'RA00' )
                 AND ( kschl <> 'RA01' ) AND ( kschl <>  'RB00' )
                 AND ( kschl <> 'PBXX' ) AND ( kschl <>  'PB00' )
                 AND ( kschl <> 'RC00' ) AND ( kschl <>  'RL01' )
                 AND ( kschl <> 'ZC00' ) AND ( kschl <>  'ZA00' )
                 AND ( kschl <> 'ZA01' ) AND ( kschl <>  'HB01' )
                 AND ( kschl <> 'ZBED' ) AND ( kschl <>  'ZAED' )
                 AND ( kschl <> 'ZSED' ) AND ( kschl <>  'ZAE1' )
                 AND ( kschl <> 'ZSE1' ) AND ( kschl <>  'ZCEX' )
                 AND ( kschl <> 'ZPRO' ) AND ( kschl <>  'ZTRD' )
                 AND ( kschl <> 'ZPK4' ) AND ( kschl <>  'ZSTX' )
                 AND ( kschl <> 'ZASS' ) AND ( kschl <>  'ZJCD' )
                 AND ( kschl <>  'HB00') ).
            APPEND int_konv.
          ENDSELECT.
        ENDON.
      ENDLOOP.
      LOOP AT int_outtab.
        ON CHANGE OF int_outtab-ebelp OR int_outtab-knumv.
          LOOP AT int_konv WHERE kposn = int_outtab-ebelp AND
                                 knumv = int_outtab-knumv.
    *                             lifnr = int_outtab-lifnr.
    ***** tax
            IF  ( ( int_konv-kschl = 'NAVS' ) OR ( int_konv-kschl = 'NAVM' )
              int_outtab-kwert_t = int_outtab-kwert_t + int_konv-kwert.
            ELSE.
    *****freight
              IF ( ( int_konv-kschl = 'FRA1' ) OR ( int_konv-kschl = 'FRB1'
                                              OR  ( int_konv-kschl = 'FRC1'
                int_outtab-kwert_f = int_outtab-kwert_f + int_konv-kwert.
              ELSE.
    *****insurance
                IF ( ( int_konv-kschl = 'ZGIN' )  OR ( int_konv-kschl =
                'ZIN2' ) ).
                  int_outtab-kwert_i =  int_outtab-kwert_i + int_konv-kwert.
                ELSE.
    ****others
                  IF NOT (    ( int_konv-kschl = 'NAVS' ) OR (
                  int_konv-kschl = 'NAVM' )
                           OR ( int_konv-kschl = 'FRA1' ) OR (
                           int_konv-kschl = 'FRB1' )
                           OR ( int_konv-kschl = 'FRC1' ) OR (
                           int_konv-kschl = 'ZGIN' )
                           OR ( int_konv-kschl = 'ZIN2' ) OR (
                           int_konv-kschl = 'RA00' )
                           OR ( int_konv-kschl = 'RA01' ) OR (
                           int_konv-kschl = 'RB00' )
                           OR ( int_konv-kschl = 'PBXX' ) OR (
                           int_konv-kschl = 'PB00' )
                           OR ( int_konv-kschl = 'RC00' ) OR (
                           int_konv-kschl = 'RL01' ) ).
                    int_outtab-kwert_o =   int_outtab-kwert_o  +
                    int_konv-kwert.
                  ENDIF.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDLOOP.
    ****total
          int_outtab-kwert_total =  int_outtab-kwert_t
                                    + int_outtab-kwert_f
                                    + int_outtab-kwert_i
                                    + int_outtab-kwert_o
                                  + int_outtab-netwr.
        ENDON.
        MODIFY int_outtab.
      ENDLOOP.
    ******End of calculation of PO
    *start of calculation for actual payment
    *****Excise
    sort int_outtab by ebelp ebeln.
      LOOP AT int_outtab.
        ON CHANGE OF int_outtab-ebelp OR int_outtab-ebeln.
          SELECT * FROM rseg INTO CORRESPONDING FIELDS OF int_rseg
    *          FOR ALL ENTRIES IN int_outtab
                 WHERE ebeln = int_outtab-ebeln AND
                       ebelp = int_outtab-ebelp.
            APPEND int_rseg.
          ENDSELECT.
        ENDON.
      ENDLOOP.
      sort int_rseg by ebelp lfbnr matnr.
      LOOP AT int_rseg.
        ON CHANGE OF int_outtab-ebelp OR int_rseg-lfbnr OR int_rseg-matnr OR
        int_rseg-lfgja.
          SELECT * FROM j_1ipart1 INTO wa_j_1ipart1
          WHERE mblnr = int_rseg-lfbnr AND
                mjahr = int_rseg-lfgja AND
                matnr = int_rseg-matnr.
            ON CHANGE OF wa_j_1ipart1-mblnr OR wa_j_1ipart1-zeile.
              SELECT * FROM j_1igrxref INTO wa_j_1igrxref
               WHERE mblnr = wa_j_1ipart1-mblnr AND
                     zeile = wa_j_1ipart1-zeile.
                IF sy-subrc EQ 0.
                  ws_ecs = ws_ecs + wa_j_1igrxref-exbed + wa_j_1igrxref-ecs.
                ENDIF.
              ENDSELECT.
            ENDON.
          ENDSELECT.
        ENDON.
        MOVE ws_ecs TO int_rseg-ecs.
        MODIFY int_rseg TRANSPORTING ecs.
        CLEAR: ws_ecs.
      ENDLOOP.
      LOOP AT int_outtab.
        ON CHANGE OF int_outtab-ebeln.
          LOOP AT int_rseg WHERE ebeln = int_outtab-ebeln.
            ws_ecs = ws_ecs + int_rseg-ecs.
          ENDLOOP.
        ENDON.
        MOVE ws_ecs TO int_outtab-ecs.
        MODIFY int_outtab TRANSPORTING ecs.
        CLEAR ws_ecs.
      ENDLOOP.
    ******unplanned costs and actual_invoice_total
      SORT int_rseg BY belnr.
      LOOP AT int_rseg .
        ON CHANGE OF int_rseg-belnr.
          SELECT  belnr beznk rmwwr tcode FROM rbkp INTO int_rbkp
          WHERE   belnr  = int_rseg-belnr .
            APPEND int_rbkp.
          ENDSELECT.
        ENDON.
      ENDLOOP.
      SORT int_rseg BY belnr.
      SORT int_rbkp BY belnr.
      LOOP AT int_rseg.
        ON CHANGE OF int_rseg-ebeln OR int_rseg-belnr.
          LOOP AT int_rbkp WHERE belnr = int_rseg-belnr.
            IF int_rbkp-tcode = 'MR8M'.
              int_rbkp-rmwwr = int_rbkp-rmwwr * ( - 1 ).
              int_rbkp-beznk = int_rbkp-beznk * ( - 1 ).
            ENDIF.
            ws_beznk =  ws_beznk + int_rbkp-beznk.
            ws_rmwwr =  ws_rmwwr + int_rbkp-rmwwr.
          ENDLOOP.
        ENDON.
        MOVE ws_beznk TO int_rseg-beznk.
        MOVE ws_rmwwr TO int_rseg-rmwwr.
        MODIFY int_rseg.
        CLEAR: ws_rmwwr, ws_beznk.
      ENDLOOP.
      LOOP AT int_outtab.
        ON CHANGE OF int_outtab-ebeln.
          LOOP AT int_rseg WHERE ebeln = int_rseg-ebeln.
            ws_beznk =  ws_beznk + int_rseg-beznk.
            ws_rmwwr =  ws_rmwwr + int_rseg-rmwwr.
          ENDLOOP.
        ENDON.
        MOVE ws_beznk TO int_outtab-beznk.
        MOVE ws_rmwwr TO int_outtab-rmwwr.
        MODIFY int_outtab.
        CLEAR: ws_rmwwr, ws_beznk.
      ENDLOOP.
    *freight of actual payment
      sort int_rseg by belnr ebelp.
      LOOP AT int_rseg.
        ON CHANGE OF  int_rseg-belnr or int_rseg-ebelp..
          SELECT * FROM ekbz INTO CORRESPONDING FIELDS OF int_ekbz
          WHERE ebeln = int_rseg-ebeln AND
                belnr = int_rseg-belnr AND
                ebelp = int_rseg-ebelp AND
                vgabe = '2' .
            IF int_ekbz-shkzg = 'H'.
              int_ekbz-wrbtr = int_ekbz-wrbtr  * ( - 1 ).
            ENDIF.
            int_rseg-wrbtr_f = int_rseg-wrbtr_f + int_ekbz-wrbtr.
          ENDSELECT.
        ENDON.
        MODIFY int_rseg.
        CLEAR int_rseg-wrbtr_f.
      ENDLOOP.
      sort int_rseg by ebelp.
      LOOP AT int_outtab.
        ON CHANGE OF int_outtab-ebeln OR int_outtab-ebelp.
          LOOP AT int_rseg WHERE ebeln = int_outtab-ebeln AND
                                 ebelp = int_outtab-ebelp.
            ws_wrbtr_f = ws_wrbtr_f + int_rseg-wrbtr_f.
          ENDLOOP.
        ENDON.
        MOVE ws_wrbtr_f TO int_outtab-wrbtr_f.
        MODIFY int_outtab TRANSPORTING wrbtr_f.
        CLEAR ws_wrbtr_f.
      ENDLOOP.
    **tax and gross amt of actual payment
      LOOP AT int_outtab.
        ON CHANGE OF int_outtab-ebelp OR int_outtab-ebeln.
        " or int_outtab-belnr.
          SELECT ebelp refwr wrbtr shkzg FROM ekbe INTO int_ekbe
          WHERE ebelp = int_outtab-ebelp AND
                ebeln = int_outtab-ebeln AND
                vgabe = '2' .
            IF int_ekbe-shkzg = 'H'.
              int_ekbe-refwr  = int_ekbe-refwr * ( - 1 ).
              int_ekbe-wrbtr  = int_ekbe-wrbtr * ( - 1 ).
            ENDIF.
            int_outtab-refwr_g = int_outtab-refwr_g +  int_ekbe-refwr.
            int_outtab-tax =  int_outtab-tax + ( int_ekbe-wrbtr -
            int_ekbe-refwr ).
          ENDSELECT.
        ENDON.
        MODIFY int_outtab.
        CLEAR int_outtab-refwr_g.
        CLEAR int_outtab-tax.
      ENDLOOP.
    ****total
      LOOP AT int_outtab.
        ON CHANGE OF int_outtab-ebelp  OR int_outtab-ebeln.
          int_outtab-actual_total =  int_outtab-actual_total
                                     + int_outtab-ecs
                                     + int_outtab-wrbtr_f
                                     + int_outtab-tax
                                     + int_outtab-beznk
                                     + int_outtab-refwr_g.
          int_total-actual_total =  int_outtab-actual_total.
          int_total-ebelp        = int_outtab-ebelp.
          int_total-ebeln        = int_outtab-ebeln.
          APPEND int_total.
        ENDON.
      ENDLOOP.
    *end of calculation for actaul payment
    *************Modification in internal table*****
      LOOP AT int_outtab.
        IF int_outtab-ebelp = ws_ebelp AND
           int_outtab-ebeln = ws_ebeln.
          int_outtab-netwr = 0.
          MODIFY int_outtab.
        ENDIF.
        ws_ebelp = int_outtab-ebelp.
        ws_ebeln = int_outtab-ebeln.
      ENDLOOP.
      LOOP AT int_outtab.
        IF int_outtab-netwr IS INITIAL.
          DELETE int_outtab INDEX sy-tabix.
        ENDIF.
      ENDLOOP.
      LOOP AT int_outtab.
        ON CHANGE OF int_outtab-ebeln.
          LOOP AT int_total WHERE ebeln = int_outtab-ebeln.
            int_outtab-actual_total =  int_outtab-actual_total
                                       + int_total-actual_total.
          ENDLOOP.
        ENDON.
        MODIFY int_outtab.
      ENDLOOP.
      LOOP AT int_outtab.
        SELECT SINGLE * FROM lfm1 INTO CORRESPONDING FIELDS OF int_outtab
        WHERE lifnr = int_outtab-lifnr.
        MODIFY int_outtab.
      ENDLOOP.
    ********** end of modification*********
    ENDFORM.                    "get_data
    *&      Form  field_catalog
    *       text
    FORM field_catalog.
    ***vender no
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'LIFNR'.
      int_cat-reptext_ddic  = 'Vender No'.
      APPEND int_cat TO ws_cat.
    *vender name
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'NAME1'.
      int_cat-reptext_ddic  = 'Vender Name'.
      APPEND int_cat TO ws_cat.
    ** PO No
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'EBELN'.
      int_cat-reptext_ddic  = 'PO No'.
      APPEND int_cat TO ws_cat.
    ** Mat No
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'MATNR'.
      int_cat-reptext_ddic  = 'Mat No'.
      APPEND int_cat TO ws_cat.
    ** Matdescription
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'TXZ01'.
      int_cat-reptext_ddic  = 'Mat description'.
      APPEND int_cat TO ws_cat.
    **WBS/Cost center
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'KOSTL'.
      int_cat-reptext_ddic  = 'WBS/Cost center'.
      APPEND int_cat TO ws_cat.
    **Currency
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'WAERS'.
      int_cat-reptext_ddic  = 'Currency'.
      APPEND int_cat TO ws_cat.
    **Basic
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'NETWR'.
      int_cat-reptext_ddic  = 'Basic'.
      APPEND int_cat TO ws_cat.
    **Excise
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'KBETR'.
      int_cat-reptext_ddic  = 'Excise'.
      APPEND int_cat TO ws_cat.
    **Insurance
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'KWERT_I'.
      int_cat-reptext_ddic  = 'Insurance'.
      APPEND int_cat TO ws_cat.
    **Frieght
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'KWERT_F'.
      int_cat-reptext_ddic  = 'Frieght'.
      APPEND int_cat TO ws_cat.
    **VAT/ST
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'KWERT_T'.
      int_cat-reptext_ddic  = 'VAT/ST'.
      APPEND int_cat TO ws_cat.
    **Other
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'KWERT_O'.
      int_cat-reptext_ddic  = 'Others'.
      APPEND int_cat TO ws_cat.
    **Total
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'KWERT_TOTAL'.
      int_cat-reptext_ddic  = 'Total'.
      APPEND int_cat TO ws_cat.
    ***Excise
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'ECS'.
      int_cat-reptext_ddic  = 'Excise'.
      APPEND int_cat TO ws_cat.
    *****Freight
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'WRBTR_F'.
      int_cat-reptext_ddic  = 'Freight'.
      APPEND int_cat TO ws_cat.
    *****Tax
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     =  'TAX'.
      int_cat-reptext_ddic  =  'Tax'.
      APPEND int_cat TO ws_cat.
    ***Unplanned Del Cost
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'BEZNK'.
      int_cat-reptext_ddic  = 'Unplanned Del Cost'.
      APPEND int_cat TO ws_cat.
    ****Gross
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'REFWR_G'.
      int_cat-reptext_ddic  = 'Gross'.
      APPEND int_cat TO ws_cat.
    **Total
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'ACTUAL_TOTAL'.
      int_cat-reptext_ddic  = 'Total'.
      APPEND int_cat TO ws_cat.
    **Actual Invoice Total
      int_cat-tabname       = 'INT_OUTTAB'.
      int_cat-fieldname     = 'RMWWR'.
      int_cat-reptext_ddic  = 'Actual Invoice Total'.
      APPEND int_cat TO ws_cat.
    ENDFORM.                    "field_catalog
    *&      Form  display_data
    *       text
    FORM display_data.
      CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
        EXPORTING
          i_callback_program = 'Z_MM_TEST1'
          it_fieldcat        = ws_cat[]
        TABLES
          t_outtab           = int_outtab
        EXCEPTIONS
          program_error      = 1
          OTHERS             = 2.
    ENDFORM.                    "display_data
    Reward for all helpfull answers
    Regards
    Pavan

Maybe you are looking for

  • In what way could i get the Shipping conditions of the SO?

    In what way could i get the Shipping conditions for those SOs which used route 'AABB'. What i mean is whether there exist a table could let me search and get output list like below?? <b>Selection Screen:</b> Sales document type: ZTO Routes: AABB <b>O

  • SAP - Crystal Report

    I am using crystal report 2008 that comes with SAP Business One 8.8. By default, sales order generated under parent company with logo and company name. Recently, we added a separate division in SAP B1 for all sales documents. By changing to the separ

  • How can I add scanned coverart to itunes?

    How can I add scanned cover art to itunes?

  • Max Number of Cubes in a MultiProvider?

    IP documentation recommends that when planning is to be done on a MultiProvider, a maximum of 10 cubes in the Multiprovider should not be exceeded. I am considering a model that will use more than 10 Real Time Cubes because Planners at each site will

  • NEED HELP PRINTING LABELS ON MY MACBOOK PRO. PLEASE!!

    HELP!  I HAVE A 6 MONTH OLD MACBOOK PRO AND AM USING THE NEWEST VERSION OF PAGES.     I DOWNLOAD MAILING ADDRESSES FROM THE TAX OFFICE FORMATTED FOR AVERY 5160 LABELS.     THE DOWNLOAD COMES IN AS A .RTF  (WORD RICH TEXT FORMAT).  I CAN'T OPEN THE DO