EirikO Skrevet 9. mai 2005 Del Skrevet 9. mai 2005 Sriver og skal lage et lite program, men lurer litt på hvordan jeg skal lage menyen.. Har laget knapper og lagt til lytter. (Egen lytter-klasse) og når man klikker på knappen prniter den noe. (Type du klikket). Men hvordan kan jeg endre innholdet i vinduet? Har prøvd å lage forskjellige JPanel i hver sin klasse og bruke følge i lytter-klassen: public void actionPerformed(ActionEvent e){ if(e.getActionCommand() == "Start spillet"){ ramme.getContentPane().removeAll(); ramme.getContentPane().add(new navnPanel(ramme)); System.out.println("heihei"); } Programmet henger seg, men "heihei" blir printet ut... navnPanel ser slik ut: public class navnPanel extends JPanel{ public JPanel navnPanel; private JLabel tekst1; private JTextField navn; private JButton startSpill, tilbake; private Lytter lytter; private Ramme ramme; public navnPanel(Ramme ramme) { this.ramme = ramme; lytter = new Lytter(ramme); navnPanel = new JPanel(); tekst1 = new JLabel("Hva er navnet ditt?"); navn = new JTextField(); navn.setPreferredSize(new Dimension(200,20)); startSpill = new JButton("Start spill"); startSpill.addActionListener(lytter); tilbake = new JButton("Tilbake"); navnPanel.add(tekst1); navnPanel.add(navn); navnPanel.add(startSpill); navnPanel.add(tilbake); } } Er det andre løsninger som er enkelre? (og fungerer... ) Lenke til kommentar
Loomy Skrevet 10. mai 2005 Del Skrevet 10. mai 2005 For å hindre at programmet henger seg/ikke lukkes skikkelig kan du prøve å lempe inn følgende i navnPanel-konstruktøren: setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Lenke til kommentar
EirikO Skrevet 10. mai 2005 Forfatter Del Skrevet 10. mai 2005 Men slik jeg har laget det har jeg laget hvert panel som egen klasse. Disse arver fra JPanel. Da kan jeg jo ikke kalle "setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);"... SLik har jeg det nå: Ramme-klasse: public Ramme(){ this.setTitle("Sheepings"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(750,750); setLayout(new FlowLayout()); getContentPane().add(new menyPanel(this)); setVisible(true); } public static void main (String[] args){ new Ramme(); } menyPanel: public menyPanel(Ramme ramme) { this.ramme = ramme; lytter = new Lytter(ramme); menyPanel = new JPanel(); menyPanel.setLayout(new FlowLayout()); startSpill = new JButton("Start spillet"); highscore = new JButton("Highscore"); credits = new JButton("Credits"); lastBrett = new JButton("Last Brett"); avslutt = new JButton("Avslutt"); startSpill.addActionListener(lytter); highscore.addActionListener(lytter); credits.addActionListener(lytter); lastBrett.addActionListener(lytter); avslutt.addActionListener(lytter); menyPanel.add(startSpill); menyPanel.add(lastBrett); menyPanel.add(highscore); menyPanel.add(credits); menyPanel.add(avslutt); } } Men jeg får ikke opp noe fra menyPanel.. Noen som har en løsning? kan også legge til at jeg har denne lytteren: public Lytter(Ramme ramme){ this.ramme = ramme; } public void actionPerformed(ActionEvent e){ if(e.getActionCommand() == "Start spillet"){ ramme.getContentPane().removeAll(); ramme.getContentPane().add(new navnPanel(ramme)); ramme.validate(); System.out.println("Start spillet"); } Hadde vært supert om noen kunne hjelpe meg med dette.... Lenke til kommentar
krigun Skrevet 10. mai 2005 Del Skrevet 10. mai 2005 Jaha.. Så du vil legge til nye komponenter inn i panelet ditt, mens programmet kjører, er det det du mener? Typ, 1. Tøm panel for komponenter 2. legg til nye Lenke til kommentar
EirikO Skrevet 11. mai 2005 Forfatter Del Skrevet 11. mai 2005 Ja.. Jeg vil fjerne ett panel og legge til et annet. Trodde kanskje følgend i lytteren gjorde susen, men neida.. ramme.getContentPane().removeAll(); ramme.getContentPane().add(new navnPanel(ramme)); (Se lytter-klassen i tidligere post) Lenke til kommentar
Patton Skrevet 11. mai 2005 Del Skrevet 11. mai 2005 Hei, hvis du effekten du oensker er aa veksle mellom to eller flere paneler, saa boer du heller bruke CardLayout. Det er en bedre og elegantere loesning. Se denne traaden. Hvis du samtidig oensker aa slette alt innhold (navn i JTextField etc.), saa kan du gjoere dette manuelt for hver komponent. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå