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. -
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.
AaranHere'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.
DagkhiLook 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,
MayoI 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 -
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 !!
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 UythovenFlash 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? -
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
kishoreHi
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
-
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