Avatar billede jesperkr Nybegynder
18. februar 2007 - 19:16 Der er 3 kommentarer og
1 løsning

Manglende forståelse af OOP i Java

Hey

Mit problem er at der en del af objekt orienteret programmering, som jeg ikke helt har forstået.

Mit konkrete problem:

Jeg har en frame med et panel
Jeg vil gerne tilføje labels til panelet når der trykkes på en knap.


MainFrame.AllProducts.Addproducts() kaldes fra knappens actionlistener.

Klassen ser nogenlunde sådan ud:

//Main.class:
ProductList AllProducts = new ProductList();
JPanel DisplayPanel = new JPanel();

public Main()
{
  AllProducts.SetDisplay(DisplayPanel);
}

//ProductList class:
public class ProductList {
   
    private Mysql db;
   
    private ProductItems Items = new ProductItems();   
    private List catID = new LinkedList();
    private JPanel Display = new JPanel();
    private int rows = 0;
   
    /** Creates a new instance of ProductList */
    public ProductList() {
    }
   
    public void SetDisplay(JPanel showProd) {
        if(showProd != null)
        {
            Display = showProd;
            Display.setLayout(new GridBagLayout());   
        }
    }
   
   
    public void ClearList()
    {
        Items = new ProductItems();
        Display.removeAll();
        Display.setLayout(new GridBagLayout());
    }
   
   
    public void addProduct(int newID, ProductList from)
    {
        List P = from.FindProd(newID);       
        Items.addProduct((Integer) P.get(0),(String) P.get(1), (Integer) P.get(2),(Integer) P.get(3),Items.Size());       
        String[] p = new String[2];
       
        Display.add(new JLabel((String) P.get(1)), InsertProduct(0,rows++));
        Display.add(String.valueOf((Integer) P.get(3)), InsertProduct(1,rows));
       
    }

    private void addCat(int id, String string, int order) {
        List list = new LinkedList();
        list.add(id);
        list.add(string);       
        catID.add(order,list);
    }
   
    public List GetCat(){   
        return catID;   
    }
   
    public List FindProd(int id)
    {
        return Items.FindItem(id,0);       
    }
   
    public List FindProd(int id,String Cell)
    {
        List tmp = null;
        if(Cell == "Categori")
            tmp = Items.FindItems(id,2); 
        return tmp;
    }
    public void CreateList() throws SQLException{
        try {
            this.db = new Mysql();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        } catch (IllegalAccessException ex) {
            ex.printStackTrace();
        } catch (InstantiationException ex) {
            ex.printStackTrace();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
       
        ResultSet maincat = db.GetQuery("SELECT IDcat,kategori,orderby FROM Kategorier");
                   
        while(maincat.next())
            addCat(maincat.getInt("IDcat"), maincat.getString("kategori"), maincat.getInt("orderby"));
       
        maincat = db.GetQuery("SELECT IDprod,navn,IDcat,pris_dk,orderby FROM Produkter ORDER BY orderby;");
        while(maincat.next())
            Items.addProduct(maincat.getInt("IDprod"), maincat.getString("navn"), maincat.getInt("IDcat"), maincat.getInt("pris_dk"), maincat.getInt("orderby"));   
    }         
   
 
  private GridBagConstraints InsertProduct(int xval, int yval)
    {
        GridBagConstraints c = new GridBagConstraints();
        c.gridx = xval;
        c.gridy = yval;
        c.weightx = 1;
        c.weighty = 1;
        c.insets = new java.awt.Insets(5,0,5,0);
       
        return c; 
    }
}

Hvordan skriver jeg til et JPanel i Main fra en method i en klasse?

Min fremgangsmåde virker ikke og når jeg compiler skriver java også "uses unchecked or unsafe operations." Jeg går udfra at det har noget at gøre med at jeg skriver til en static variable fra en dynamisk klasse?

Hvad er det jeg ikke forstår?

Hilsen

Jesper
Avatar billede mikkelbm Nybegynder
18. februar 2007 - 19:21 #1
"uses unchecked or unsafe operations." er blot compileren der gør opmærksom på, at du ikke gør brug af generics:

private List catID = new LinkedList();

kunne være:

private List<DinKlasse> catID = new LinkedList<DinKlasse>();

Men det er blot en warning.
Avatar billede mikkelbm Nybegynder
20. maj 2007 - 19:46 #2
Brugbart?
Avatar billede jesperkr Nybegynder
25. maj 2007 - 04:24 #3
Jeg løste det ved at strukturer koden anderledes.

Jeg lukker.

Jesper
Avatar billede jesperkr Nybegynder
25. maj 2007 - 04:24 #4
Luk
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