Archief - JAVA: probleemke met uml

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Attila

Legacy Member
Ik weet ni juist of het nu echt hier hoort, maar de meesten zullen hier ook wel java geleerd hebben denk ik (hoopt :) ).

Code:
		JPanel productlijntje = new JPanel(new GridLayout(0,2));
		System.out.println("aantal:" + stock.getAantal());
 		productnaam = new JLabel(naam,JLabel.CENTER);
	 	productnaam.setVisible(true); 		
 		addproduct = new JButton("add");
 		mouse addproductAction = new mouse("Product " + naam +" bijvoegen");
 		addproduct.addMouseListener(addproductAction);
 		addproduct.setActionCommand(naam);
	 	addproduct.addActionListener(this);
	 	addproduct.setVisible(true);
	 	productlijntje.add(productnaam);
	 	productlijntje.add(addproduct);
	 	productlijntje.setVisible(false);
	 	System.out.println(productlijntje);
	 	productlijn[lengte] = productlijntje;

Nu ik krijg mijn JPanel array van productlijn niet gefixed. Normaalmoet productlijntje in de array van productlijn[plaats] komen, maar ik krijg altijd nullpointerexception terug.

Iemand idee?? plz help :(

Emerxill

Legacy Member
Waarschijnlijk omdat er ergens een array niet geïnitialiseerd is ofzo...

DarkBone

Legacy Member
En mogen wij de declaratie en initialisatie van die array ook eens zien ?
Als ge nullpointer exception krijgt krijg ik al zo'n donkerbruin vermoeden dat ge uw array wel gedeclareerd hebt, maar nog niet geïnitialiseerd.

Voorbeeld:
Code:
[size=2]String[] hoopje; // declaratie[/size]
[size=2]hoopje = [/size][b][size=2][color=#7f0055]new[/b][/color][/size][size=2] String[5]; // initialisatie[/size]
[size=2]hoopje[1] = [/size][size=2][color=#2a00ff]"test"[/color][/size][size=2];[/size]

*edit* en ik ben niet de enigste die er zo over denkt :D
*edit2* wat heeft dit trouwens met UML van doen?

Attila

Legacy Member
ja ok, ni meer aangedacht, normaal denk ik er altijd maar,mor soit.

Maar private JPanel[] productlijn;
dan moet ik zeggen hoeveel er moete zijn, terwijl ik dit niet kan weten op voorhand. en ik maak dus nieuwe panels bij en steek die in een array van nieuwe panels. en die array moet uitbreidbaar zijn :/

Attila

Legacy Member
dan krijg ik een object gereturned, maar het moete JPanels behouden. Of kan ik vanuit object terug tot een JPanel geraken?

Want het is de bedoeling dat de JPanel's die ik aanmaak in de while lus dus in die array komen en dat ik die achteraf eruit kan halen om dan op het scherm te zetten. dus ik moet terug een JPanel hebben

Emerxill

Legacy Member
Attila zei:
dan krijg ik een object gereturned, maar het moete JPanels behouden. Of kan ik vanuit object terug tot een JPanel geraken?

Want het is de bedoeling dat de JPanel's die ik aanmaak in de while lus dus in die array komen en dat ik die achteraf eruit kan halen om dan op het scherm te zetten. dus ik moet terug een JPanel hebben

Dan moet ge dat Object terug naar JPanel casten, kweet wel niet of da gaat lukken, kunt altijd maar ens proberen: gewoon "(JPanel)" (zonder quotes) voorzetten.

Voor uw uitbereidbare Array zou het handiger zijn een Vector gebruiken, daarvoor hoeft ge niet te weten hoeveel elementen ge gaat gebruiken.

Tenslotte zou ik uwe JPanel niet in zijn geheel in ne array zetten, enkel de data, maar dat is uw keuze ;)

DarkBone

Legacy Member
Tuurlijk moet je dan casten!
En die JPanels worden nooit in zijn geheel in een array gestoken hoor, dat zijn enkel referenties naar...

pass-by-reference in plaats van pass-by-value

Attila

Legacy Member
merci, wist niet dat JPanel ook terug kon gecast worden.

Zal sebiet is uitproberen :)

Emerxill

Legacy Member
Wel grappig dat DarkBone voor de 2e keer exact een minuut later post met inhoudelijk etzelfde als ik :wtf: :D

Dit geheel :offtopic: natuurlijk

Attila

Legacy Member
wel raar als ik da terug uitmijne vector wil casten naar JPanel blijft em hangen :confused: maw da terug casten lijkt mij niet correct te zijn.

Zal anders naar andere mogelijkheden moete zien

DarkBone

Legacy Member
Attila zei:
merci, wist niet dat JPanel ook terug kon gecast worden.

Zal sebiet is uitproberen :)
Alle klassen zijn allemaal terug te voeren tot de klasse Object (hoogste in de rang zeg maar). Alle klasses zijn dus afgeleid van de klasse Object.

't Is daarom dat in zoveel API Collection classes bijvoorbeeld als paramaters een object van het type Object wordt veracht. Bijgevolg kunt ge alle klasses daarin onderbrengen. En bijgevolg kunt ge die bij het eruit halen ook weer terug casten. Feit dat da ne Swing component is doet niks ter zake, da's oko maar een klasse hé

DarkBone

Legacy Member
Danhebt gij toch een andere Java dan ik ze...

Working example:
Code:
import java.util.ArrayList;
   import javax.swing.JPanel;
   
   public class MyClass
   {
   
   	public MyClass()
   	{
   		JPanel myPanel = new JPanel();
   		ArrayList myArrayList = new ArrayList();
   		
   		System.out.println(myPanel.toString());
   		
   		myArrayList.add(myPanel);
   		JPanel newPanel = ((JPanel)myArrayList.get(0));
   		
   		// Opgelet zowel myPanel als newPanel verwijzen naar zelfde object!
   	}
   
   	public static void main(String[] args)
   	{
   		new MyClass();
   	}
   }

Is nu wel met een arraylist, weet niet onmiddelijk wat het verschil is in snelheid/performance tussen vector en arraylist, maar dit is in ieder geval een getest werkend voorbeeld...

*edit*
net ff heel vluf opgezocht:
ArrayList is faster
Because it has not synchronization overhead.

Een vector is dus synchronized, arraylist niet.

Attila

Legacy Member
merci, juist de fout gevonden waarom em vast zat. Was te rap met iet te testen :p

Attila

Legacy Member
hmm khem nog een klein foutje ofwel overzie ik iets verkeerd :/
Ik heb dus een centraal gedeelte van mijn scherm dat ik gebruik om vanalles op te laten komen. Nu die textarea en hetgeen in while lust wordt gedaan, maar komt niet op scherm met deze code.

Code:
 		centerverkoop = new JPanel(new GridLayout(0,1));
 		centerArea = new JTextArea();
     	centerAreaPane = new JScrollPane(centerArea);
     	centerAreaPane.setPreferredSize(new Dimension(200, 100));
     	centerArea.setEditable(false); 		
 		centerAreaPane.setVisible(false);
			 		 		
 		center.add(centerAreaPane); 		 	
 		int i=0;
 		System.out.println(productlijn.size());
 		while(productlijn!=null && i<productlijn.size())
 		{
 			productlijntje = (JPanel)productlijn.get(i);
 			productlijntje.setVisible(true);
 			centerverkoop.add(productlijntje);
	 	i++;		
 		} 
		center.add(centerverkoop); 						
 		centerAreaPane.setVisible(true);

En als ik hier stompzinnig een knop bijzet die ik in een ander gedeelte ook gebruik, dan komt wel alles op het scherm incl de while lus enzo.
Code:
 		centerverkoop = new JPanel(new GridLayout(0,1));
 		centerArea = new JTextArea();
     	centerAreaPane = new JScrollPane(centerArea);
     	centerAreaPane.setPreferredSize(new Dimension(200, 100));
     	centerArea.setEditable(false); 		
 		centerAreaPane.setVisible(false);
 		
		toevoegproduct = new JButton("Toevoegen");
		mouse toevoegproductAction = new mouse("Product toevoegen in de database");
		toevoegproduct.addMouseListener(toevoegproductAction);
		toevoegproduct.setActionCommand(toevoegenstringbutton);
		toevoegproduct.addActionListener(this);
		toevoegproduct.setVisible(false); 
			 		 		
 		center.add(centerAreaPane); 
 		centerverkoop.add(toevoegproduct);			 	
 		int i=0;
 		System.out.println(productlijn.size());
 		while(productlijn!=null && i<productlijn.size())
 		{
 			productlijntje = (JPanel)productlijn.get(i);
 			productlijntje.setVisible(true);
 			centerverkoop.add(productlijntje);
	 	i++;		
 		} 
		center.add(centerverkoop); 		
 		toevoegproduct.setVisible(true); 				
 		centerAreaPane.setVisible(true);

Overzie ik iets verkeerd???

sys4096

Legacy Member
Op het eerste zicht niet. Maar toch even een opmerking/tip.
Code:
 		System.out.println(productlijn.size());
 		while(productlijn!=null && i<productlijn.size())


Als uw productlijn null is, gaat ge een nullpointer exception krijgen door uw debug system.out .

Goed oppassen met zulke debug lijntjes. Het is niet de eerste keer dat een werkende routine door de stomme toevoeging van een debug lijntje plots niet meer werkt. (been there, done that :sad: ) :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan