Gå til innhold

Hva er enkleste måte å lage meny på?


Anbefalte innlegg

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... :p )

Lenke til kommentar
Videoannonse
Annonse

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.... :whistle:

Lenke til kommentar

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...