Avatar billede montymus Nybegynder
14. marts 2004 - 10:57 Der 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();
        }
Avatar billede simonvalter Praktikant
14. marts 2004 - 11:01 #1
er Writefile en knap ?
så skal du have fat i
http://java.sun.com/j2se/1.3/docs/api/java/awt/Component.html#setEnabled(boolean)
Avatar billede simonvalter Praktikant
14. marts 2004 - 11:02 #2
altså button.setEnabled(true);
Avatar billede montymus Nybegynder
14. marts 2004 - 11:05 #3
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
Avatar billede simonvalter Praktikant
14. marts 2004 - 11:19 #4
sikkert noget ligende.
ItemWriteFile itemWriteFile = new ItemWriteFile("item.dat");
itemWriteFile.write(item);
Avatar billede simonvalter Praktikant
14. marts 2004 - 11:20 #5
eller
itemWriteFile.write(item,"item.dat");
Avatar billede montymus Nybegynder
14. marts 2004 - 11:28 #6
Det virkede ikke..

min writeFile ser således ud:

import java.io.*;

public class ItemWriteFile {

    private ItemCollection items;
    private String fileName ="MS-itemfil.dat";

    ItemWriteFile(ItemCollection aItemCollection){
        items = aItemCollection;

    }

    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
Avatar billede simonvalter Praktikant
14. marts 2004 - 11:59 #7
nej det du gør skal jo afspejle de metoder der er på din klasse

jeg går ud fra at it er din itemcollection så skal du bare

ItemWriteFile itemWriteFile = new ItemWriteFile(it);
itemWriteFile.doIt();
Avatar billede montymus Nybegynder
14. marts 2004 - 13:19 #8
Har tilføjet det og den vil gerne gemme noget men ikke det rigtige...

Min klasse ser således ud.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

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();



    panel.add(itemNoLab);
    panel.add(itemNo);
        panel.add(itemTypeLab);
    panel.add(itemType);
        panel.add(qualityLab);
    panel.add(quality);
        panel.add(yearLab);
    panel.add(year);
        panel.add(priceLab);
    panel.add(price);
        panel.add(hourPriceLab);
    panel.add(hourPrice);
       

        add(panel,BorderLayout.CENTER);

        itemNo.requestFocus();

                buttonPanel.add(ok);
                buttonPanel.add(cancel);
                add(buttonPanel,BorderLayout.SOUTH);



        ok.addActionListener(this);
        cancel.addActionListener(this);



    }

    public void actionPerformed(ActionEvent hat){
        Object buttonPressed = hat.getSource();
        if (buttonPressed == ok){
            String aItemNo = itemNo.getText();
            String aItemType = itemType.getText();
                        String aPriceStr = price.getText();
            double aPrice = Double.parseDouble(aPriceStr);
                        String aYearStr = year.getText();
            int aYear = Integer.parseInt(aYearStr);
            String aQuality = quality.getText();
                        String aHourPriceStr = hourPrice.getText();
            double aHourPrice = Double.parseDouble(aHourPriceStr);
           
                        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;
    }


}
Avatar billede simonvalter Praktikant
14. marts 2004 - 13:42 #9
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å.
Avatar billede montymus Nybegynder
14. marts 2004 - 14:06 #10
Jeg kan ikke kopiere det da de indeholder null code
Avatar billede simonvalter Praktikant
14. marts 2004 - 14:17 #11
paste lige koden for dit item så kan jeg kigge nærmere på det.
Avatar billede montymus Nybegynder
14. marts 2004 - 14:29 #12
import java.io.*;

public class Item implements Serializable{
    private String itemNo, itemType, quality;
    private double price;  // sale price
    private double hourPrice; // rental price per hour
    private int year;

//Note that itemNo uniquely identifies an item object

    Item (    String aItemNo, String aItemType, double aPrice,
            int aYear, String aQuality, double aHourPrice)  {
        //initialise all data fields to parameters
        itemNo = aItemNo;
        itemType = aItemType;
        quality = aQuality;
        year = aYear;
        price = aPrice;
        hourPrice = aHourPrice;
    }

// All get- and set-methods
    public String getItemNo ( )  {
        return itemNo;  }

    public void setItemNo (String aItemNo)  {
        itemNo = aItemNo;
    }

    public String getItemType ( )  {
        return itemType;  }

    public void setItemType (String aItemType)  {
        itemType = aItemType;
    }

    public String getQuality ( )  {
        return quality;  }

    public void setQuality (String aQuality)  {
        quality = aQuality;
    }

    public int getYear ( )  {
        return year;
    }

    public void setYear (int aYear)  {
        year = aYear;
    }

    public double getPrice( )  {
        return price;  }

    public void setPrice(double aPrice)  {
        price = aPrice;
    }

    public double getHourPrice( )  {
        return hourPrice;  }

    public void setHourPrice(double aPrice)  {
        hourPrice = aPrice;
    }
    public int getAge (int presentYear )  {
        return (presentYear-year);
    }

// Returning item data
    public String itemData () {
        return ("\n" + "ItemNo: " + itemNo +
                "\n" + "Itemtype: " + itemType +
                "\n" + "Price: " + price +
                "\n" + "Year: " + year +
                "\n" + "Quality: " + quality +
                "\n" + "Rental Price: " + hourPrice +
                "\n");
    }

    public String toString () {
        return ("\n" + "ItemNo: " + itemNo +
                "\n" + "Itemtype: " + itemType +
                "\n" + "Price: " + price +
                "\n" + "Year: " + year +
                "\n" + "Quality: " + quality +
                "\n" + "Rental Price: " + hourPrice +
                "\n") ;
    }

}// Item
Avatar billede simonvalter Praktikant
14. marts 2004 - 14:44 #13
ja så ved jeg det ikke, jeg kan saktens serialisere med den kode.

prøve at give mig en precise fejl du får smidt når du prøver.
Avatar billede arne_v Ekspert
14. marts 2004 - 19:44 #14
Prøv og lav en public constructor uden argumenter i Item og ItemCollection.
Avatar billede montymus Nybegynder
14. marts 2004 - 19:59 #15
Jeg har fundet ud af det.. Hvis i skal have lidt point at lege med så smid lige et svar
Avatar billede arne_v Ekspert
14. marts 2004 - 20:02 #16
Hvad var det som hjalp ?
Avatar billede montymus Nybegynder
14. marts 2004 - 20:08 #17
jeg lavede en public constructor uden argumenter som du sagde.. hehe
Avatar billede arne_v Ekspert
14. marts 2004 - 20:10 #18
ok
Avatar billede arne_v Ekspert
14. marts 2004 - 20:11 #19
(hvis ikke det var det ville jeg nemlig ikke have lagt et svar - loadet har
jo trods alt lavet det meste af arbejdet)
Avatar billede montymus Nybegynder
14. marts 2004 - 20:14 #20
takker
Avatar billede simonvalter Praktikant
15. marts 2004 - 08:32 #21
hehe det måtte jeg foresten også gøre, men tænkte ikke over at det kunne være dit problem ;)
Avatar billede simonvalter Praktikant
15. marts 2004 - 11:56 #22
iøvrigt kan jeg ikke se hvordan den gui kode kan virke, den dræber min vm =)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester