Verschillende beginners vragen

Status
Niet open voor verdere reacties.

Mr Wyb

Gebruiker
Lid geworden
15 aug 2007
Berichten
5
Beste lezers,

Ik ben al een jaartje met zeer makkelijke programmeer projectjes bezig geweest, nu ga ik volgend jaar een (soort) informatica opleiding doen. Deze opleiding gebruikt bijna alleen Java. Tot nu toe heb ik alleen maar in Visual Basic .Net geprogrammeerd, en Java lijkt natuurlijk erg veel op Visual Basic .Net, maar het is niet hetzelfde (overduidelijk). Dus in voorbereiding op mijn opleiding was ik van plan om één van mijn projectjes overnieuw te doen, alleen dan in Java. Enfin:

Het project is een soort hulp programmatje om andere programma's te instaleren. Enkele functies zijn: alle cdkeys bewaren, de cdkey zonder CTRL+V gedoe plakken, mijn standaard directory voor software en games automatisch plakken. Dit werkte in VB.NET allemaal perfect :thumb: !

Alleen nu loop ik bij Java al tegen de lamp bij een paar eenvoudige operaties:
(ik heb uit frustatie het project verwijderd, dus hier is mijn gedachten gang:)
De GUI maken met JSwing + NetBeans was gemakkelijk.

Class1GUI:
Deze class bevat alle generated code door NetBeans en ook de event listeners (ik denk dat het zo heet, de koppeling tussen het klikken op de button en het uitvoeren van de bijhorende code, dat bedoel ik). Deze roepen uit Class2 methods aan die bewerking met parameters uit de GUI verwerken en ze dan weer terugsturen naar een method in Class1GUI die de GUI update.

Class2:
Deze bevat nu nog alleen een method om de cdkey die is ingevoerd, op te splitsen naar een array (dit is gelukkig nog simpeler dan in VB.NET) en dan aan het einde van de method wil ik deze delen van de cdkey (elk stukje van 2340-3450-3450-2834) laten zien in verschillende jTextFields.

Dingen die niet lukken:
Ik kan pas een method aanroepen in Class1GUI als deze in Class2 is gemaakt als Static en het mag blijkbaar ook geen Void zijn. Wat alleen inhoud toch dat deze method geen return value heeft naar mijn weten, dit los ik dan op door gewoon return null te gebruiken maar dit lijkt me niet erg proper programming ;) . Maar doordat alles nu Static methods zijn mag ik niet eigenschappen veranderen, omdat ik binnen een static method geen jField.setText("dummy") mag aanroepen. Ik zou natuurlijk alles in één class kunnen programmeren, of alle code onder de event handler zetten.. maar dit lijken me geen ECHTE oplossingen.

Wie weet wat ik helemaal verkeerd doe? Of heeft gewoon de aanpak hoe ik dit project wel moet maken? Alvast bedankt
 
Je moet eens kijken naar de principes van OO (Object Oriented) programmeren. Als je een instantie van een klasse hoef je niet statische methoden te gebruiken. Voor een simpel programma heb je meestal maar 1 statische methode nodig en dat is de public static void main(...). Maak vanuit die methode een nieuw object van de klasse en roep dan de (niet statische) methoden aan.
 
bedankt voor je reactie,

ik kom alleen nog niet verder, want ik denk dat het struikelpunt vooral is hoe ik dus methoden uit een ander .java bestand haal. Ik werk met NetBeans en mijn hierarchie ziet er zo uit:

Code:
Source Package
           |------package1
                     |-----Class1GUI.java           \\bevat de gui code
                     |-----Class2.java                 \\bevat methoden die waarden uit velden van de GUI halen

Nu probeerde ik die class als object te definen:
Code:
class testClass = package1.Class2

maar dat vond Java onzin :o

1. Wie kan mij vertellen hoe ik parameters mag doorgeven naar methoden in Class2?
2. Wie kan mij vertellen hoe ik de waarden, die daar uit die methoden komen, die weer in de GUI verwerkt krijg?

nogmaals bedankt

/edit
Dit geeft geen errors, maar volgens mij werkt het ook niet helaas:
(staat in de main)

Code:
class testClass extends clockwork{

}
 
Laatst bewerkt:
Het maken van een object doe je nog niet goed. Als je van de klasse Class2 een object wilt maken dan doe je dat door:

Class2 objectVanClass2 = new Class2();

Vervolgens kun je op het object de methoden aanroepen die in de klasse Class2 gedefinieerd zijn. Stel, je hebt een methode in Class2 gedefinieerd: public int telop(int getal1, int getal2){...} dan roep je die aan met:

int resultaat = objectVanClass2.telop(1, 2);
 
och wat dom van mij, je hebt helemaal gelijk

ik ga het direct proberen

:thumb:

/edit

ARGH!



Code:
public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Class1GUI().setVisible(true);
            }
        });
        Class2 objClass2 = new Class2 ();
    }


 
(...)

private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                               
        [COLOR="Red"]objClass2.(wat dan ook werkt niet) [/COLOR]
    }

wat wel kan is in Class2 een method maken iets als

Code:
public void test() {
        int x;
    }

die kan wel worden aangeroepen in Class1GUI, maar dan weer niet in de eventhandlers.
 
Laatst bewerkt:
Dat je vanuit de eventhandler niet een methode van objClass2 kunt aanroepen komt doordat dat object alleen te zien is binnen de scope van de main() methode. Als je van objClass2 een globale variabele maakt, dan is hij in de hele klasse zichtbaar, dus ook in andere methoden dan de main (en dus ook eventhandler methoden).
 
Ik ben nu zo ver dat ik alles overal kan aanroepen waar ik het wil ;)

maar nu het volgende probleem:

ik moet nu met een for-loop alle textfields afgaan om ze in te vullen, dus dacht ik dan maak ik een array met alle textfield objecten erin en dan zoiets doen:

Code:
jTextField[] textfieldsArray = {jTextfield1,jTextfield2, enz};

for (i=0; i < 10; i++) {
       jTextField[i].setText("waarde");
}
dit werkt niet, omdat ik op een gerefeerd object geen methodes als setText kan aanroepen, hoe doe ik dit wel, google verteld me niets :(

alvast bedankt
 
Om dit goed te begrijpen moet je eerst goed doorhebben wat
Code:
jTextField[] textfieldsArray = {jTextfield1,jTextfield2, enz};
precies betekent. Het eerste woord: "jTextField" is het type. Normaal gesproken schrijf je dit met een hoofdletter, dus een JTextField. Het volgende woord: textfieldsArray is de array zelf. Daar kun je dus de elementen van opvragen.
In je for-loop moet je dus ook de array genaamd textfieldsArray gebruiken en niet het type van die array.

En let er dus op dat je de types (behalve primitieve types als int, double, etc.) met een hoofdletter schrijft.
 
Ik had een type fout gemaakt, wat ik bedoelde was
Code:
jTextField[] textfieldsArray = {jTextfield1,jTextfield2, enz};

for (i=0; i < 10; i++) {
       textfieldsArray[i].setText("waarde");
}
maar ik snap nu wat ik verkeerd deed: hij herkende jTextField niet omdat ik swing niet geimport had, dus de oplossing was simpel:
Code:
public void run() {
        String[] temp;
        javax.swing.JTextField[] fieldArray = {jTextField2,jTextField3,jTextField4,jTextField5,jTextField6};
        temp = clockwork.Splitkeys(jTextField1.getText());
       
        int i;
        for (i=0; i < temp.length(); i++) {
            fieldArray[i].setText("lol");
        }
    }
dus ik dacht hup compilen en klaar..

cannot find symbol
symbol : method length()
location: class javax.swing.JTextField[]

nou gaat ie opeens zoeken naar de methode length in JTextField??

/edit
netBeans opnieuw opgestart, compiled zonder errors :D!

bedankt geen verdere vragen op dit moment!
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan