JButton toevoegen vanuit paintComponent

Status
Niet open voor verdere reacties.

stienoo

Gebruiker
Lid geworden
31 dec 2007
Berichten
315
Is er een manier om een JButton toe te voegen vanuit paintComponent?
 
Meerdere keren (Het is met vragen, en soms moet je 2 knoppen kunnen gebruiken en soms 1).
 
Dan kan je misschien een if met een boolean gebruiken

Code:
if(paintKnop1){
  panel.add(btn1);
} else{
  panel.remove(btn1);
}

Misschien zou je die else ook nog wel kunnen laten (heb het niet getest)
 
Werkt niet, hier even de code waar het om gaat, momenteel heb ik gewoon "add(button);"staan:

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

public class Puistjes extends JFrame {

  public static void main( String args[] ) {
    JFrame frame = new Puistjes();
    frame.setSize( 550, 200 );
    frame.setLocation(300,150);
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.setTitle( "Puistje" );
    JPanel paneel = new PuistjesPaneel();
    frame.setContentPane( paneel );
    frame.setVisible( true );
  }
}


class PuistjesPaneel extends JPanel {
	private JButton ja, nee, vorige, volgende;
	private String vraag="",vraag2="", vraag3="";
	private int plaats=0,x[]={100,0,0},y[] ={100,0,0};
	private boolean jaNee;
	
  public PuistjesPaneel() {
	  
	  ja =(new JButton("  ja  "));
	  ja.addActionListener(new Ja());
	  nee =(new JButton("  nee  "));
	  nee.addActionListener(new Nee());
	  vorige =(new JButton("  vorige  "));
	  vorige.addActionListener(new Vorige());
	  volgende = (new JButton("Volgende"));
	  volgende.addActionListener(new Volgende());
	  
	  add(vorige);

	  
  }
  public void paintComponent(Graphics g){
	  super.paintComponent(g);

	  if(plaats==0){
		  vraag="Is er reeds een behandeling ingesteld?";
		  x[0]=100;
		  y[0]=100;
		  vraag2="";
		  x[1]=20;
		  y[1]=120;
		  vraag3="";
		  x[2]=20;
		  y[2]=140;
		  plaats++;
		  add(ja);
		  add(nee);
	  }
	  if (jaNee==true){
		  if (plaats==1){
			  vraag="- De behandeling identificeren.";
			  x[0]=100;
			  y[0]=100;
			  vraag2="- Aangepaste hygiënische maatregelen aanbevelen.";
			  x[1]=100;
			  y[1]=120;
			  vraag3="- Bevorderde factoren vermijden.";
			  x[2]=100;
			  y[2]=140;
		  }
		  if (plaats==2){
			  vraag="- De producten identificeren en nagaan of de keuze gerechtvaardigd is.";
			  x[0]=20;
			  y[0]=100;
			  vraag2="- De aanbevelingen op het gebied van hygiëne, verzorging, te vermijden gedrag, enz. herhalen.";
			  x[1]=20;
			  y[1]=120;
			  vraag3="";
			  x[2]=20;
			  y[2]=140;
		  }
		  if (plaats==3){
			  vraag="Lokale verzorging: Aanbeveling op het gebied van hygiëne en verzorging,";
			  x[0]=100;
			  y[0]=100;
			  vraag2="Zig wenden tot een dermatoloog.";
			  x[1]=100;
			  y[1]=120;
			  vraag3="";
			  x[2]=100;
			  y[2]=140;
		  }
		  if (plaats==4){
			  vraag="Lokale verzorging: Aanbevelingen op het gebied van hygiëne en verzorging, keratolytica, antibiotica of lokale anti-inflammatoire middelen (antibiotica per os).";
			  x[0]=100;
			  y[0]=100;
			  vraag2="";
			  x[1]=100;
			  y[1]=120;
			  vraag3="";
			  x[2]=100;
			  y[2]=140;
		  }
		  if (plaats==5){
			  vraag="Lokale verzorging: Aangepaste hygiënische maatregelen, specifieke verzorging, keratolytica";
			  x[0]=100;
			  y[0]=100;
			  vraag2="+";
			  x[1]=100;
			  y[1]=120;
			  vraag3="De aanbevelingen herhalen (te vermijden of aanbevolen produkten en houdingen)";
			  x[2]=100;
			  y[2]=140;
		  }
	  }
	  
	  if(jaNee==true){
		  if (plaats==1){
			  vraag="Welke zijn uw gewoonten op het gebied van hygiëne en huidverzorging?";
			  vraag2="Gebruikt u bepaalde produkten?";
			  x[1]=100;
			  y[1]=120;
			  add(ja);
			  add(nee);
		  }
		  if (plaats==2){
			  vraag="De huid analyseren om het type acne te identificeren (belangrijkste letsels).";
			  x[0]=100;
			  y[0]=100;
			  vraag2="";
			  x[1]=20;
			  y[1]=120;
			  vraag3="";
			  x[2]=20;
			  y[2]=140;
			  add(volgende);
		  }
		  if (plaats==3){
			  vraag="Kysten uitgebreide letsels?";
			  x[0]=100;
			  y[0]=100;
			  vraag2="";
			  x[1]=20;
			  y[1]=120;
			  vraag3="";
			  x[2]=20;
			  y[2]=140;
			  add(ja);
			  add(nee);
		  }
		  if (plaats==4){
			  vraag="Witte puntjes?";
			  x[0]=100;
			  y[0]=100;
			  vraag2="";
			  x[1]=20;
			  y[1]=120;
			  vraag3="";
			  x[2]=20;
			  y[2]=140;
			  add(ja);
			  add(nee);
		  }
		  if (plaats==5){
			  vraag="Zwarte puntjes (meeëters)?";
			  x[0]=100;
			  y[0]=100;
			  vraag2="";
			  x[1]=20;
			  y[1]=120;
			  vraag3="";
			  x[2]=20;
			  y[2]=140;
			  add(ja);
	  }
	  }
	  g.drawString (vraag, x[0], y[0]);
	  g.drawString(vraag2, x[1], y[1]);
	  g.drawString(vraag3, x[2], y[2]);
	  g.drawString(""+plaats,20,20);
      
  }
  
  class Volgende implements ActionListener{
	  public void actionPerformed(ActionEvent e){
		  plaats++;
		  jaNee=false;
		  repaint();
	  }
  }
  class Vorige implements ActionListener{
	  public void actionPerformed(ActionEvent e){
		  
	  }
  }
  
  class Ja implements ActionListener{
	  public void actionPerformed(ActionEvent e){
		  plaats++;
		  jaNee=true;
		  repaint();
	  }
  }
  
  class Nee implements ActionListener{
	  public void actionPerformed(ActionEvent e){
		  plaats++;
		  jaNee=false;
		  repaint();
  }
  }
  
}
 
Namelijk dat als ik heb programma opstart er alleen de "vorige" button word getoond, nochtans word in het volgende stukje toch duidelijk ook de "ja" en de "nee" button aangeroepen:

Code:
	  if(plaats==0){
		  vraag="Is er reeds een behandeling ingesteld?";
		  x[0]=100;
		  y[0]=100;
		  vraag2="";
		  x[1]=20;
		  y[1]=120;
		  vraag3="";
		  x[2]=20;
		  y[2]=140;
		  plaats++;
		  add(ja);
		  add(nee);
	  }
 
zet eens een breakpoint daarbij en kijk of hij daar wel langskomt.
Weet je hoe debuggen werkt?

Zo nee, welke IDE gebruik je?
 
Ik ben nog een beginner dus ik weet niet wat een breakpoint is en ik weet ook niet wat debuggen is, graag wat meer uitleg?

Maar ik weet wel dat hij die if uitvoert want hij stelt de vraag (maar de aanroeping staat wel verder in de if)

Ik gebruik eclipse.
 
Als je voor een coderegel met je muis klikt, dan komt er een punt(of een pijltje) te staan
Dat is een breakpoint.

Als je dan een programma probeert te draaien en je drukt op een knop welke de functie aanroept waar je een breakpoint neer hebt gezet, stopt het programma. Vervolgens kan jij door de code heen 'steppen' oftewijl, handmatig verdergaan. Dan kan je precies bekijken wat er gebeurt, wat de inhoud van je variabelen is... enz...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan