SweClockers drop!

Programmering A (Java) Hjälp!!

Permalänk

Programmering A (Java) Hjälp!!

Hej!

Jag har stött på problem som måste lösas innan imorgon eftermiddag. Jag ska göra ett program där man beställer hamburgare, väldigt enkelt konstruerat med olika paneler och swing-komponenter (JPanel, JCheckBox osv..)

Problemet jag nu stött på är att komponenterna jag adderar inte syns. Vore jätteschyst om någon kunde hjälpa mig eller rent av slutföra uppgiften, då ännu hellre med att alla komponeter har ett värde (t.ex. checkboxen "whopper" "kostar" 20sek) så man kan se vad slutpriset landar på. Vore helt galet schyst!!

Här är koden för själva grunden.

import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Burgerkingorder extends JFrame { private JLabel label; private JPanel bakgrund, p1, p2; private CardLayout cl; public Burgerkingorder() { setLayout(new FlowLayout()); //konstruktor label = new JLabel("Have it your way!"); add(label); } public JPanel createJPanels(){ bakgrund = new JPanel(); p1 = new JPanel(); //ändrade BPanel1 till JPanel. p1.setBackground(Color.blue); p2 = new JPanel(); //ändrade BPanel2 till JPanel. p2.setBackground(Color.blue); cl = new CardLayout(); bakgrund.setLayout(cl); bakgrund.add(p1,"FF1"); bakgrund.add(p2, "xxx"); return bakgrund; } //nedan följer fönstrets egenskaper public static void main (String args[]){ Burgerkingorder gui = new Burgerkingorder(); gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); gui.setSize(202,270); gui.setVisible(true); gui.setTitle("Välkommen till Burgerking!"); /*MenuBar = själva raden, Menu = kategorierna (ex. arkiv, redigera), MenuItem = underkategorierna (ex. importera, avsluta)*/ JMenuBar meny = new JMenuBar(); gui.setJMenuBar(meny); JMenu arkiv = new JMenu("Arkiv"); meny.add(arkiv); JMenuItem burgare = new JMenuItem("Burgare"); arkiv.add(burgare); JMenuItem drycker = new JMenuItem("Drycker"); arkiv.add(drycker); JMenu help = new JMenu("Hjälp"); meny.add(help); JMenuItem about = new JMenuItem("Om..."); help.add(about); } class listener implements ActionListener{ public void actionPerformed (ActionEvent ae){ if(ae.getActionCommand().equals("Burgare")){ System.out.println("Burgare"); cl.show(bakgrund, "Burgare"); } else if(ae.getActionCommand().equals("Drycker")){ System.out.println("Drycker"); cl.show(bakgrund, "Drycker"); } } } }

Dold text

Första panelen (sidan)

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class BPanel1 extends JPanel { private JLabel yourway, klicka, kostnad; private JCheckBox whopper, bigking, angus, cheeseburger; private JComboBox whopperantal, bigkingantal, angusantal, cheeseburgerantal; private JButton b1 = new JButton("Prisfakta"); private JTextField pris; private JButton b2 = new JButton("Beställ"); private JPanel panel = new JPanel(); private toDoListener toDo; public BPanel1(){ whopper = new JCheckBox("Whopper"); add(whopper); String[] whopperantal = { "1", "2", "3" }; JComboBox whoppercombo = new JComboBox(whopperantal); add(whoppercombo); bigking = new JCheckBox("Big King XXL"); add(bigking); String[] bigkingantal = { "1", "2", "3" }; JComboBox bigkingcombo = new JComboBox(bigkingantal); add(bigkingcombo); angus = new JCheckBox("The Angus"); add(angus); String[] angusantal = { "1", "2", "3" }; JComboBox anguscombo = new JComboBox(angusantal); add(anguscombo); cheeseburger = new JCheckBox("Cheeseburger"); add(cheeseburger); String[] cheeseburgerantal = { "1", "2", "3", "4", "5" }; JComboBox cheeseburgercombo = new JComboBox(cheeseburgerantal); add(cheeseburgercombo); klicka = new JLabel("Klicka för pris"); add(klicka); b1 = new JButton("Kostnad"); add(b1); b1.addActionListener(new toDoListener()); kostnad = new JLabel("________"); add(kostnad); b2 = new JButton("Beställ!"); add(b2); add(panel); panel.setLayout(new GridLayout(2, 5)); } public class toDoListener implements ActionListener { public void actionPerformed(ActionEvent e) { kostnad.setText("50 SEK"); } } }

Dold text

Säg till om ni behöver de andra panelernas kod! Tack så jättemycket på förhand

Permalänk
Medlem

setVisible gör du sist - efter att du har lagt till alla komponenter (testar du att resiza fönstret nu borde det fungera iom att den ritar om allt då).

Permalänk
Skrivet av DaiNeaA:

setVisible gör du sist - efter att du har lagt till alla komponenter (testar du att resiza fönstret nu borde det fungera iom att den ritar om allt då).

Det konstiga är att hela förstasidan funkar, dvs. labeln och titeln på fönstret samt menyerna. Det som inte funkar är att komma någonvart i menyerna, så den visar helt enkelt inte de checkboxes osv som jag adderar...

Permalänk
Skrivet av marmeladharry:

Det konstiga är att hela förstasidan funkar, dvs. labeln och titeln på fönstret samt menyerna. Det som inte funkar är att komma någonvart i menyerna, så den visar helt enkelt inte de checkboxes osv som jag adderar...

Du använder väl aldrig din BPanel1-klass i Burgerkingorder-klassen eller? Du kallar heller aldrig på createJPanels-metoden vilket gör att den aldrig körs.

Permalänk
Skrivet av equals(null):

Du använder väl aldrig din BPanel1-klass i Burgerkingorder-klassen eller? Du kallar heller aldrig på createJPanels-metoden vilket gör att den aldrig körs.

Det är förmodligen sant då det står så i Eclipse... Det tråkiga är att jag är way 2 noob för att kunna förstå precis vad du menar, så vad/hur ska jag göra? Tack på förhand!

Permalänk
Skrivet av marmeladharry:

Det är förmodligen sant då det står så i Eclipse... Det tråkiga är att jag är way 2 noob för att kunna förstå precis vad du menar, så vad/hur ska jag göra? Tack på förhand!

I konstruktorn lägg till en rad med add(createJPanels()) och i createJPanels-metoden ändra p1= new JPanel() till p1 = new BPanel1() och likadant för p2 eller om du har en annan klass för p2 du vill använda. Sen bör du nog, som det nämndes tidigare, ha setVisible sist i main-metoden tror jag.

Permalänk
Skrivet av equals(null):

I konstruktorn lägg till en rad med add(createJPanels()) och i createJPanels-metoden ändra p1= new JPanel() till p1 = new BPanel1() och likadant för p2 eller om du har en annan klass för p2 du vill använda. Sen bör du nog, som det nämndes tidigare, ha setVisible sist i main-metoden tror jag.

Mycket tacksam för svaren

Flyttade ner setVisible längst ner i main-metoden, hoppas att jag gjorde rätt. Sedan så lade jag till "add(createJPanels())" men fick ett komplieringsfel för det, detta också i mainmetoden (som är konstruktorn, eller är jag helt fel ute?), kolla printscreen som är bifogad

http://imgur.com/UlXie

Permalänk
Skrivet av marmeladharry:

Mycket tacksam för svaren

Flyttade ner setVisible längst ner i main-metoden, hoppas att jag gjorde rätt. Sedan så lade jag till "add(createJPanels())" men fick ett komplieringsfel för det, detta också i mainmetoden (som är konstruktorn, eller är jag helt fel ute?), kolla printscreen som är bifogad

http://imgur.com/UlXie

En konstruktor är den del av ett objekt som alltid körs när ett objekt initieras. I ditt fall är det public Burgerkingorder() { ... } som är din konstruktor.

Mainmetoden är den del av din programkod som startar hela exekveringen. I ditt fall är det public static void main(String[] args) { ... }.

add(createJPanels()) ska alltså ligga under public Burgerkingorder().

Permalänk
Skrivet av equals(null):

En konstruktor är den del av ett objekt som alltid körs när ett objekt initieras. I ditt fall är det public Burgerkingorder() { ... } som är din konstruktor.

Mainmetoden är den del av din programkod som startar hela exekveringen. I ditt fall är det public static void main(String[] args) { ... }.

add(createJPanels()) ska alltså ligga under public Burgerkingorder().

Tack! Du förklarar mycket bättre än min lärare

Nu fungerar det till viss del, dvs komponenterna syns på skärmen/i fönstret vilket är kanon Vet du hur man på ett enkelt sätt kan sätta ett värde på varje komponent (ex cheeseburger = 20) och att man då kan få fram ett unikt pris för varje kombination? Eller är det lite klurigt? Vore kanonschyst om du kunde hjälpa mig med det

Permalänk
Skrivet av marmeladharry:

Tack! Du förklarar mycket bättre än min lärare

Nu fungerar det till viss del, dvs komponenterna syns på skärmen/i fönstret vilket är kanon Vet du hur man på ett enkelt sätt kan sätta ett värde på varje komponent (ex cheeseburger = 20) och att man då kan få fram ett unikt pris för varje kombination? Eller är det lite klurigt? Vore kanonschyst om du kunde hjälpa mig med det

I detta fall hade jag nog i actionPerformed-metoden bara angett vad varje sak kostar, multiplicera det med det antal som valts i boxarna och skriva ut summan av alla produkterna. Finns säkert något bättre sätt men är inte så hemma på swing så hade nog löst det så här.

Permalänk
Skrivet av equals(null):

I detta fall hade jag nog i actionPerformed-metoden bara angett vad varje sak kostar, multiplicera det med det antal som valts i boxarna och skriva ut summan av alla produkterna. Finns säkert något bättre sätt men är inte så hemma på swing så hade nog löst det så här.

Det låter ju kanon! Hur anger man vad det ska kosta? (Behöver koden som ska stå i actionPerformed-metoden...)

Ursäkta min okunskap...

Permalänk

Genom en integer, ex int whopperCost = 20

Permalänk
Skrivet av equals(null):

Genom en integer, ex int whopperCost = 20

Okej, ja det låter ju logiskt iofs.

int whopperCost = 20
if (whopper = true)
blablabla addera till kostnad

Kan det vara något sådant, en if-sats alltså..? Vad krävs och hur fortsätter man? Blablabla är just det jag inte vet

Permalänk
Skrivet av marmeladharry:

Okej, ja det låter ju logiskt iofs.

int whopperCost = 20
if (whopper = true)
blablabla addera till kostnad

Kan det vara något sådant, en if-sats alltså..? Vad krävs och hur fortsätter man? Blablabla är just det jag inte vet

Nu vet jag iofs inte om man kan använda whopper == true, men något i stil med följande borde kanske fungera:

int whopperCost = 20; int bigKingCost = 30; int angusCost = 40; int whopperCount = ** Hämta antal whopper från swing-klasserna ** int bigKingCount = ** Hämta antal big kings från swing-klasserna ** int angusCount = ** Hämta antal angus från swing-klasserna ** int totalSum = (whopperCount * whopperCost) + (bigKingCount * bigKingCost) + (angusCount * angusCost); kostnad.setText(Integer.toString(totalSum));

Kan tyvärr inte i huvudet hur man hämtar ut värdet ur ett swing-objekt men finns säkert något smidigt sätt.

Permalänk
Skrivet av equals(null):

Nu vet jag iofs inte om man kan använda whopper == true, men något i stil med följande borde kanske fungera:

int whopperCost = 20; int bigKingCost = 30; int angusCost = 40; int whopperCount = ** Hämta antal whopper från swing-klasserna ** int bigKingCount = ** Hämta antal big kings från swing-klasserna ** int angusCount = ** Hämta antal angus från swing-klasserna ** int totalSum = (whopperCount * whopperCost) + (bigKingCount * bigKingCost) + (angusCount * angusCost); kostnad.setText(Integer.toString(totalSum));

Kan tyvärr inte i huvudet hur man hämtar ut värdet ur ett swing-objekt men finns säkert något smidigt sätt.

Ska prova detta Ska det läggas i actionListener-klassen eller?