Avatar billede bagnavnet Nybegynder
08. december 2004 - 22:43 Der er 11 kommentarer og
1 løsning

Grafisk visning af et array

Hej

Jeg sidder og leger lidt med JBuilder hvor jeg prøver at lave en grafisk brugerflade til mit system.

Der er dog en funktion jeg ikke helt kan få op at stå.

Som man ser på mange websider, fx just-eat.dk, er der en liste over varer. Her kan man klikke af hvilke vare man ønsker samt antal. Jeg ønsker at lave den samme funktion så simpelt som overhovedet muligt da jeg ikke er en haj til det her!!

Jeg har en oracle database med nogle varer. Disse varer vil jeg gerne kunne liste på min side på en eller anden smart måde, hvor kunden samtidigt får mulighed for at vælge varen og antal som vedkommende ønsker.

Det ville være rigtig snedigt hvis disse varer kunne blive lagt over i en indkøbsvogn. Dette er dog pt ikke det vigtigste, nævner det bare hvis der skulle sidde én derude med en nem løsning til dette.

I JBuilder benytter jeg AWT, men ved ikke om det er det smarteste til formålet.

Nogen der kan hjælpe med ovenstående?
Avatar billede arne_v Ekspert
08. december 2004 - 22:49 #1
AWT er forældet. Man bruger Swing idag.

Men både AWT og Swing er jo til applikationer ("fat client" i fag sproget).

Til en web løsning skal du bruge JSP.
Avatar billede arne_v Ekspert
08. december 2004 - 22:51 #2
Swing har nogle meget avancerede klasser som JList og JTable til at vise
data med.

JSP blander HTML tags og Java kode embedded i <%  %>.

Vær opmærksom på at meget få web hoteller understøtter JSP.
Avatar billede arne_v Ekspert
08. december 2004 - 22:52 #3
Du kan iøvrigt godt bruge AWT eller Swing til en web applikation ved at bruge en
Applet eller JApplet.

En applet er en applikation som køres i browseren.

Men der er nogle komplikationer med hensyn til database adgangen som
skal løses så !
Avatar billede mikkelbm Nybegynder
09. december 2004 - 13:26 #4
Har lige lavet et hurtigt eksempel (dog i swing):

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

public class Handel extends JFrame
{
    private Item[] items = new Item[]{new Item("Banan", 10), new Item("Æble", 5), new Item("Kondomer", 50)};
   
    private DefaultListModel itemModel = new DefaultListModel();
    private JList listItems = new JList(itemModel);
   
    private DefaultListModel buyModel = new DefaultListModel();
    private JList listBuy = new JList(buyModel);
   
    private JButton buy = new JButton ("Køb >>");
   
    public Handel()
    {
        setSize(400, 400);
        listItems.setListData(items);
       
        listItems.setPreferredSize(new Dimension(150, 10));
        listBuy.setPreferredSize(new Dimension(150, 10));
        listItems.setBorder(BorderFactory.createTitledBorder("Varer"));
        listBuy.setBorder(BorderFactory.createTitledBorder("Indkøbskurv"));
       
        this.getContentPane().add(listItems, BorderLayout.WEST);
        this.getContentPane().add(listBuy, BorderLayout.EAST);
       
        // Temp panel så knappen ikke fylder hele midter-sektionen
        JPanel temp = new JPanel();
        temp.add(buy);
        this.getContentPane().add(temp, BorderLayout.CENTER);
       
        buy.addActionListener(new ActionListener()
        {
            public void actionPerformed (ActionEvent e)
            {
                buy();   
            }
        });
    }
   
    private void buy()
    {
        Item it = (Item)listItems.getSelectedValue();
        if (it != null)
            buyModel.addElement(it);   
    }
   
    public static void main(String[] args)
    {
        new Handel().setVisible(true);   
    }
}

class Item
{
    private String name;
    private double price;
   
    public Item (String name, double price)
    {
        this.name = name;
        this.price = price;
    }
   
    public String toString()
    {
        return name;
    }
}
Avatar billede bagnavnet Nybegynder
09. december 2004 - 17:25 #5
mikkelbm det er smukt.
Jeg har tilføjet en knap der hedder "<<Fjern" men kan ikke få den placeret under "køb>>" knappen.

Tror den er gal her:
JPanel temp = new JPanel();
        temp.add(buy);
        this.getContentPane().add(temp, BorderLayout.CENTER);
       
        JPanel temp1 = new JPanel();
        temp1.add(remove);
        this.getContentPane().add(temp1, BorderLayout.????CENTER);
Hvad skal jeg kalde borderLayout?
Avatar billede mikkelbm Nybegynder
09. december 2004 - 17:33 #6
eks. 1
...
JPanel temp = new JPanel(new GridLayout(2, 1));
temp.add(buy);
temp.add(remove);
this.getContentPane().add(temp, BorderLayout.CENTER);


eller:

eks. 2
...
JPanel temp1 = new JPanel(new BorderLayout());
       
JPanel temp = new JPanel(new GridLayout(2, 1));
temp.add(buy);
temp.add(remove);
       
temp1.add(temp, BorderLayout.NORTH);
this.getContentPane().add(temp1, BorderLayout.CENTER);


Der er sikkert en smartere måde. Jeg ved man kan nogle tricks med GridBagLayout - jeg har desværre bare ikke selv arbejdet med det. Men eksempel 2 virker i hvert fald.
Avatar billede bagnavnet Nybegynder
09. december 2004 - 18:16 #7
Og så lige den sidste ting. Jeg har tilføjet endnu en knap der hedder "send ordre".
Når, man trykker på den må den gerne fjerne det der ligger i indkøbskurven og sende det afsted....(når ellers jeg har fået resten af mit system op at køre skal det sendes ned i min database, og jeg vil derfor gerne gøre koden klar til dette).

jeg har lavet følgende som ikke lader til at virke:

private void order()
    {
        System.out.println("her er ordren:  " + buyModel);
        Vare it = (Vare)listItems.getAllElements();
        if (it != null)
            buyModel.removeAllElements(it);
    }

Kan du se hvad der er galt der?
Avatar billede mikkelbm Nybegynder
09. december 2004 - 18:22 #8
1. Det her kan du ikke:
Vare it = (Vare)listItems.getAllElements();

getAllElements() returnerer et objekt-array (Object[]) det kan du ikke caste til en Vare.

2.
buyModel.removeAllElements(it);

skal ændres til:

buyModel.removeAllElements(); // altså uden parametre
Avatar billede mikkelbm Nybegynder
09. december 2004 - 18:24 #9
Jeg kan ikke hjælpe dig med at tilføje det til din database, da jeg ikke kender strukturen på denne. Men det må blive noget a la:
...
Object[] o = buyModel.getAllElements();

for (int i = 0; i < o.length; i++)
{
  database.add ((Vare)o[i]);
}
...

(Pseudo kode)
Avatar billede bagnavnet Nybegynder
09. december 2004 - 18:25 #10
Klart!
Mange tak for hjælpen.
Det blev til denne version:

private void order()
    {
       
        System.out.println("her er ordren:  " + buyModel);
        buyModel.removeAllElements();

    }
Avatar billede mikkelbm Nybegynder
09. december 2004 - 18:29 #11
Hvis det var brugbart tillader jeg mig at smide et svar...
Avatar billede bagnavnet Nybegynder
09. december 2004 - 18:38 #12
Det var det bestemt. Jeg håber du vil deltage når jeg inden længe smider et spørgsmål omkring hvordan jeg får min kode til at køre som client/server/rmi;-)
Tak for nu!
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