14. marts 2004 - 10:57Der er
21 kommentarer og 1 løsning
aktivere Writefile ved tryk på en knap..
Jeg har en Create knap og når jeg trykker på den samler den noget data skrevet på skærmen, men den skal også aktivere ItemWriteFile så jeg kan gemme til en dat fil. Hvordan gør jeg det.. Knappen er defineret her...
if (ae.getSource() == ok) { String nummer = inNumber.getText(); String type = inType.getText(); String quality = inQuality.getText(); String priceStr = inPrice.getText(); double price = Double.parseDouble(priceStr); String yearStr = inYear.getText(); int year = Integer.parseInt(yearStr); String hourPriceStr = inHourPrice.getText(); double hourPrice = Double.parseDouble(hourPriceStr); Item item = new Item(nummer, type, price, year,quality, hourPrice); it.addItem(item); System.out.println(item.toString() + " " + it.numberOfItems()); dispose(); }
jeg har en ItemWriteFile klasse og en Guiklasse. Guiklassen har en knap der hedder create og den henter nogle data fra skærmen (se kode ovenover), men den skulle også gerne aktivere ItemWriteFile klassen så jeg kan skrive til en dat fil. Problemet er jeg kan ikke huske hvordan og hvorledes
public void doIt(){ System.out.println("Running doit on " + items.numberOfItems() + "!"); try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("MS-itemfile.dat")); int size = items.numberOfItems(); oos.writeInt(size); for (int i=0; i<size; i++){ System.out.println(items.getItem(i)); oos.writeObject(items.getItem(i)); } oos.close(); } catch (IOException ioex){ System.out.println(ioex.getMessage()); ioex.printStackTrace(); } } }
Der er dat filen jo defineret så det knappen skal er at sætte det hele igang dvs tage de ting der er blevet indlæst fra skærmen og placere dem i den fil der er defineret i ItemWriteFile
public class GuiCreateItem extends JPanel implements ActionListener {
private JTextField itemNo = new JTextField(15); private JTextField itemType = new JTextField(15); private JTextField quality = new JTextField(15); private JTextField year = new JTextField(15); private JTextField price = new JTextField(15); private JTextField hourPrice = new JTextField(15); private JButton ok = new JButton("Opret - ok"); private JButton cancel = new JButton("Opret - cancel"); private ItemCollection ic = new ItemCollection();
//Methods //Constructor public GuiCreateItem(){ JFrame ob = new JFrame(); ob.getContentPane().add(new GuiCreateItem()); ob.setSize(375,425); ob.setVisible(true); ob.setTitle("Welcome to Music Soft - Item System"); ob.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } } );
setLayout(new BorderLayout());
JPanel panel = new JPanel(); panel.setLayout(new GridLayout(10,2)); JLabel itemNoLab = new JLabel("Item nummer"); JLabel itemTypeLab = new JLabel("Item Type"); JLabel qualityLab = new JLabel("Kvalitet"); JLabel yearLab = new JLabel("Fremstillingsår"); JLabel priceLab = new JLabel("Pris"); JLabel hourPriceLab = new JLabel("Pris pr. time");
/* ButtonGroup tempGr = new ButtonGroup(); for(int butNum = 0; butNum < temp.length; butNum++){ tempGr.add(temp[butNum]); } */ JPanel dataPanel = new JPanel(); JPanel buttonPanel = new JPanel();
Item item = new Item(aItemNo, aItemType, aPrice, aYear, aQuality, aHourPrice); ic.addItem(item); System.out.println(ic); ItemWriteFile iwf = new ItemWriteFile(ic); iwf.doIt(); } else if
(buttonPressed == cancel){
}
}
} Når jeg så gemmer så bliver det til noget klamp er det fordi jeg har defineret en ItemCollection i datafeltet når jeg har en ItemCollectionklasse i forvejen???
Min ItemCollection ser således ud:
import java.util.*;
public class ItemCollection{
// Declaration of data fields private Vector data;
// Declaration of constructor ItemCollection() { data = new Vector(); }//constructor
// Adding a item always return true public boolean addItem(Item aItem) { data.addElement(aItem); return true; }
// Check index. Typecast and return aItem public Item getItem(int index) { if (index >= 0 && index < data.size() ){ Item aItem = (Item) data.elementAt(index); return aItem; } else return null; }
// Check index. Typecast and remove aItem public Item removeItem(int index) { if (index >= 0 && index < data.size() ) { Item aItem = (Item) data.elementAt(index); data.removeElementAt(index); return aItem; } else return null; }
// Note there is no maximum of items public int numberOfItems() { return data.size(); }
// Building up a string of items public String itemsData() { Item aItem; String s = "\n"; for (int i=0; i < data.size(); i++) { aItem = (Item) data.elementAt(i); s = s + aItem.itemData() + "\n"; } return s; }
// Traverse vector. Typecast and return aItem public Item getItem(String itemNo) { Item aItem; String myItemNo; for (int index=0; index < data.size(); index++) { aItem = (Item) data.elementAt(index); myItemNo = aItem.getItemNo(); if ( myItemNo.equals(itemNo) ) { return aItem; } } return null; // not found }
// Traverse vector. Typecast and return aItem // Assumes that itemNo uniquely identifies an item public Item removeItem(String itemNo) { Item aItem; String myItemNo; for (int index=0; index < data.size(); index++) { aItem = (Item) data.elementAt(index); myItemNo = aItem.getItemNo(); if ( myItemNo.equals(itemNo) ) { data.remove(index); return aItem; } }
return null; // not found }
/* public Instrument findBestInstrument(String aType){ Instrument aInstrument; Instrument best = (Instrument)data.get(0);
for (int i=1; i < data.size(); i++) { aInstrument=(Instrument) data.get(i); if (aInstrument.getTotal()>best.getTotal()) best=aInstrument; } return best; }
*/ public String toString() { Item aItem; String s = "\n"; for (int i=0; i < data.size(); i++) { aItem = (Item) data.elementAt(i); s = s + aItem + "\n"; } return s; }
definer klamp .. jeg har ikke rodet med serialisering i lang tid, men hvis du skal serialisere et objekt skal det implementere java.io.Serializble og det skal din collection vel også.
iøvrigt kan jeg ikke se hvordan den gui kode kan virke, den dræber min vm =)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.