Module in java?

  • Onderwerp starter Onderwerp starter BEEE
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

BEEE

Gebruiker
Lid geworden
14 mrt 2011
Berichten
62
Beste Helpmij'ers.

Ik ben bezig met een héél eenvoudig javaprogrammatje te schrijven. (ik ben héél erg nieuw in java).

Ik gebruik netBeans en gebruik een 'JFrame'.

Ik dacht dat ...:
Ik zet op het JFrame en jPanel (hoofdpannel) en maak in dezelfde package een 'JPanel' (weergeefpanel) aan.
Ik dacht als ik nu dit doe:
hoofdpannel = packagenaam.weergeefpanel;

Ik in mijn 'hoofdvenster' het weergeefpanel zou tezien krijgen. Dit is dus niet zo?

Kan iemand mij hierbij helpen.


Dan heb ik nog een vraag:
In Visual Basic bestond er zoiets als een module waardoor je gegevens kon uitwisselen tussen meerdere Forms. Bestaat dit ook op Jave? Indien niet, hoe kan je dit dan oplossen?



Alvast Bedankt
BEEE
 
Hey BEEE,

Ik ben benieuwd hoe je code er ongeveer uit ziet, gebruik je meerdere klassen?
Meeste mensen gebruiken dit namelijk wel.

Ik weet niet hoe je applicatie er uit ziet, maar ik probeer je een klein voorbeeldje te geven:

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

public class NieuweKlasse 
{
	//Zorg dat er alvast (lege) instantie's zijn van JFrame en JPanel
	static JFrame frame;
        static JPanel panel;
	
	public static void main(String[] args)
	{
		//Maak een nieuw JFrame met een titel en schrijf die naar het alvast aangemaakte 'frame'
		frame = new JFrame("TITEL VAN HET PROJECT");
		
		 // Maak een nieuw JPanel genaamd 'panel' en schrijf die naar panel
		panel = new JPanel();
		
		// Voeg daar een nieuw Label aan toe met de opdruk 'aa'
		panel.add(new JLabel("test")); 
		
		 //Voeg het panel toe aan het frame
		frame.add(panel);
		//Zorg dat het frame een voorkeursafmeting heeft van 640x480 pixels
		frame.setPreferredSize(new Dimension(640, 480));
		//Pack het frame en zorg dat het zichbaar word
		frame.pack();
		frame.setVisible(true);
	}
}

  1. Importeer de benodigde bibiliotheken (java.awt.* en javax.swing.*)
  2. Maak een statische instantie van een JFrame aan met als naam 'frame'
  3. Maak een statische instantie van een JPanel met als naam 'panel'
  4. Maak een nieuw JFrame aan en schrijf die naar 'frame' (hierdoor is hij ook beschikbaar in andere methoden)
  5. Maak een nieuw JPanel aan en schrijf die naar 'panel' (hierdoor is hij ook beschikbaar in andere methoden)
  6. Voeg aan het JPanel een nieuw JLabel toe met als opdruk 'test' (dit is een test!)
  7. Voeg het panel toe aan het frame
  8. Stel de voorkeursafmetingen van het frame vast
  9. Finaliseer het frame en laat het alles zien!

Hopelijk ben je hier wat verder mee.
Als je het Panel en Frame echt wil scheiden, laat het maar horen!

Als antwoord op je vraag over VB:

Je kan dus meerdere JFrame's aanmaken en in de main methode er verschillende dingen mee doen.
Zo kun je het ene JFrame iets laten opslaan in een variabele en hem vervolgens met een andere JFrame weer uitlezen.

Meestal scheid je hiervoor ook verschillende klassen.

Als je het écht wil beginnen te leren raad ik je het volgende aan:
Installeer BlueJ en probeer daar eens wat mee.
http://www.bluej.org/help/javahelp.html kan je zeker helpen!
 
Laatst bewerkt:
Super bedankt voor het reageren,

Je zou graag mijn code zien, maar die heb ik niet echt, het zijn kleine stukjes code om gewoon dingen te testen.

Je voorbeeldcode is al erg verhelderend.
- Je kan dus eigenlijk zonder een 'extend' Jframe , ook een frame weergeven...

Als je meerdere klassen aanmaakt met 1 Jframe in... dan 'openen' je deze met de mainklasse, maar hoe doe je dit dan?

Ik gebruikte voor een class extends Jframe dit:
Code:
 kolonistenvancatan.AboutUs AboutUsScherm;
      AboutUsScherm = new kolonistenvancatan.AboutUs() ;
      AboutUsScherm.show();
      AboutUsScherm.toFront();
Goed?

Is het beter om te werken met een zelfgemaakte scherm (in zelfgeschreven code) dan te laten genereren door bv Netbeans (door slepen van objecten naar een form)?

Je vertelde dat het mogelijk, is en vaak gebeurt, dat er variabelen gebruikt worden tussen klassen...
Ik probeerde dit zo:
Code:
naampackage.naamklas.variabele = "iets"; //(in geval van string)
Maar dit blijkt niet te werken...
Ook lukte het me niet om een label aan te passen op dezelfde manier (met dan setText("iets")), ookal was de label public en de class ook public?

Of is het enkel mogelijk om vanuit andere klassen de gegevens in je mainclass aan te passen?
Of doe ik iets anders verkeerd?


Alvast bedankt!
 
Laatst bewerkt:
Geen dank!

Je kan inderdaad zonder 'extends JFrame' ook een frame weergeven!
Ik ga je nu als eerst maar verwijzen naar het volgende:

http://docs.oracle.com/javase/tutorial/uiswing/components/index.html
Hier staan de officiele tutorials m.b.t het gebruik van de Java Swing componenten (waarmee je een GUI bouwt)

Je moet ten eerste afstappen van het gebruik van de package, die geven enkel accesrechten (en wat andere dingen die hierop niet van toepassing zijn)

Wat je moet doet is ongeveer het volgende:

[CPP]
import javax.swing.*;
import java.awt.*;

public class NieuweKlasse
{
static TweedeKlasse frame;
static JPanel panel;

/**
* De hoofdmethode, deze word aangeroepen bij het maken van je programma
*/
public static void main(String[] args)
{
//Maak een nieuwe instantie van TweedeKlasse aan en schrijf die naar frame (roept de constructor aan!)
frame = new TweedeKlasse();

//Maak een nieuw panel aan
panel = new JPanel();

//Maak een nieuw JLabel zonder opdruk
JLabel label = new JLabel();
//Verander de opdruk naar "X is: 42" (zie de volgende klasse waarom).
label.setText("X is: " + frame.geefX());

//Voeg aan het panel de Label toe, en vervolgens aan het frame het panel.
panel.add(label);
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
}

class TweedeKlasse extends JFrame
{
// Een prive variabele genaamd X
private int x = 42;

/**
* Constructor: Als er een instantie van deze klasse word gemaakt word de constructor aangeroepen
*/
public TweedeKlasse()
{
this.setPreferredSize(new Dimension(640, 480));
this.setTitle("Titel");
}

/**
* Geeft de X terug die normaal alleen bij deze klasse hoort
*/
public int geefX()
{
return x;
}
}

[/CPP]

Ik zou zeggen kijk hier eens naar, het incorporeert ook jou gebruik van de JLabel,
En het maakt ook gebruik van meerdere klassen!

Nogmaals, probeer niet de packagenaam te gebruiken, dat heeft geen enkel effect.
Je krijgt toegang tot de methoden van een klasse als je een instantie maakt van een klasse!

Bijvoorbeeld:

[CPP]NieuweKlasse nieuweKlasse = new NieuweKlasse();

nieuweKlasse.methode();[/CPP]

Daarnaast zou ik altijd je GUI zelf maken, maar ik kan begrijpen als je dit niet doet.
Het probleem is dan echter dat code schrijven ook direct een stuk moeilijker word.

Kijk dus nogmaals eens naar de link die ik je heb gegeven hierboven,
Daar kan je zeker wat van opsteken m.b.t. het bouwen van GUI's.


Als laatste; het is niet alleen mogelijk om vanuit andere klassen methoden aan te roepen,
maar je main-klasse is een statische klasse. Hierdoor moet je zijn methoden statisch maken.
In theorie kan je ook beter maar 1 methode in je hoofdklasse hebben: de hoofdmethode main.

Kijk daarom even naar mijn 2e voorbeeld.



Hopelijk ben je zo weer een stukje verder,
Als je vragen hebt hoor ik het wel!
 
Alles is zeer duidelijk en het voorbeeld is zéér handig,

Ik begrijp enkel nog niet wat je bedoeld met:
Als laatste; het is niet alleen mogelijk om vanuit andere klassen methoden aan te roepen,
maar je main-klasse is een statische klasse. Hierdoor moet je zijn methoden statisch maken.
In theorie kan je ook beter maar 1 methode in je hoofdklasse hebben: de hoofdmethode main.

Als er bijvoorbeeld op een knop ,dat in een frame dat gemaakt is in de hoofdklasse, geklikt wordt dan wordt er toch een methode aangeroepen in de hoofdklasse, of is dit niet noodzakelijk?
(ik bedoel dan:
Code:
private void iets_actie(java.awt.event.ActionEvent evt) {     ... }
bijvoorbeeld)
Dit is een statische methode neem ik aan, er worden geen gegevens teruggegeven bij het 'uitvoeren' ervan.
Waarom is het in theorie niet goed om meer dan de hoofdmethode te maken?


Bedankt!


ps, ik ben jaloers op je 'handtekening' :eek:
Programmeertalen:
Java, C++, C#, VB.NET, PHP
Markup Language's:
XML & HTML
 
Laatst bewerkt:
Vergeet wat ik zei, ik was niet helemaal wakker, en als ik het zo teruglees;
Mijn excuses voor de verwarring.

Als je die methode wil implementeren kan dat gerust!

probeer het dan op de volgende manier overigens:

[CPP]
JButton knopEen = new JButton("Testknop");

knopEen.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
voerMethodeUit();
}
});
[/CPP]

En voeg de knop toe met:

[CPP]
frame.add(knopEen);
[/CPP]

Dit is een veel gebruikte manier en houd de code dicht bij de knop!

Overigens, een klein puntje, een void is geen statische methode.
Een statische methode is bijvoorbeeld je main! (public static void main())

Als iets je nu heeft verward, ik hoor het wel!



ps. Als je vastbesloten bent kun jij het ook allemaal leren hoor
Heb het dan ook voornamelijk mezelf aan geleerd!

Dus; keep on coding!
 
Ok, héél erg bedankt!

Ik kan nu wel weer even aan de slag!

Als ik een probleem heb post ik het wel!

Bedankt

Grtjs
BEEE
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan