Hoe kan ik een nieuwe instantie maken via een knop?

Status
Niet open voor verdere reacties.

suikerklontje

Gebruiker
Lid geworden
4 dec 2007
Berichten
75
Goede avond.

Ik heb een programmeer vraagje. Ik heb een simpele applicatie gemaakt die 2 balletjes heen en weer laat bewegen, om het duidelijker te maken hier een screenshot:

plaatje.jpg


De balletjes bewegen in een boog langs elkaar.

Nu wil ik doormiddel van de + knop zoals te zien op het screenshot dat er telkens 1 balletje bij komt als ik er op klik.

Als ik: bal = new Bal(-100, 0, 10, Color.RED); doe bij plushandler komt er geen balletje bij. Is er iemand die weet wat voor code hier moet komen:

class PlusHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {

}
}

Voor de duidelijkheid hier de source

http://www.sdp-gaming.com/bal.java
http://www.sdp-gaming.com/paneel.java


Alvast hartelijk dank.
 
Laatst bewerkt:
Als ik: bal = new Bal(-100, 0, 10, Color.RED); doe bij plushandler komt er geen balletje bij.
Je hebt je nieuwe balletje wel degelijk aangemaakt, alleen zal je het ook nog aan het JPanel/Frame/... moeten toevoegen.
--Johan
 
probeer het hiermee eens:

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

class Paneel13_2 extends JPanel {

    private Timer timer;
    private JButton plus;
    private ArrayList<Bal> _balLijst = new ArrayList<Bal>();
    private int _XPos = -50;
    private int _YPos = 0;

    public Paneel13_2() {
        {
            _balLijst.add(new Bal(-100, 0, 10, Color.RED));
            _balLijst.add(new Bal(100, 25, 10, Color.BLUE));
            timer = new Timer(10, new TimerHandler());
            timer.start();
            plus = new JButton("+");
            plus.addActionListener(new PlusHandler());
            add(plus);
        }
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        setBackground(Color.WHITE);
        plus.setBounds(-30, 30, 70, 30);
        g.translate(200, 220);
        g.drawLine(-110, 10, 120, 10);
        for (int i = 0; i < _balLijst.size(); i++) {
            _balLijst.get(i).stuiter(g);
        }
    }

    class PlusHandler implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            _YPos += 10;
            _XPos += 2;
            _balLijst.add(new Bal(_YPos, _XPos, 10, Color.YELLOW));
        }
    }

    class TimerHandler implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            repaint();
        }
    }
}

Wat ik heb gedaan.
De ballen in een array gezet en ze van daaruit laten tekenen.
Elke keer als er een nieuwe bal toegevoegt wordt, dan begint de bal net op een andere x-positie en andere y-positie en omdat hij in de arraylist wordt gezet wordt hij ook meteen mee-gepaint.
 
Goede oplossing om te werken met een Arraylist en balLijst.size(); i++) zodat die op het Jpanel komt wat ik vergeten was :-)

Hartelijk dank voor jullie hulp!

Solved
 
Laatst bewerkt:
Sorry voor de wat late conclusie. Ik heb zojuist de code geprobeerd en er wat mee zitten spelen, maar krijg het nog steeds niet voor elkaar dat er een bal bij komt.

Jbutton is aangemaakt --> verwijzing naar button gemaakt
Jbutton voegt entry toe aan arraylist van bal
paint in paneel doet een for loop op basis van arraylist.length

Alles lijkt te kloppen....Wat gaat er mis. Iemand enig idee?
 
Dat is de code die jij hebt gepost. Heb het wat zitten veranderen etc maar kreeg het bal niet op het scherm na van alles geprobeerd te hebben...:(
 
De code die ik veranderd heb mocht niet baten en de applicatie gaf verschillende compile errors etc. Het beste is om de code hierboven die gepost is aan te houden gezien daar ergens een fout in zit. Heb alleen geen idee waar...
 
Als je nou je huidige code laat zien, dan kunnen we daar fouten in gaan zoeken.
Soms kan het net een klein typefoutje zijn :)
 
Die heb ik ondertussen niet meer.

De post die jij hebt gedaan op: 27-12-2007 20:22 gebruik ik. Bij het gebruik van EXACT die code gaat het mis en komt er geen tweede balletje op het scherm. Vandaar ook me vraag of het mogelijk zou zijn die code te herzien en te kijken wat er mis gaat.

Heb er van alles in geprobeerd zonder dat ik dat probleem opgelost kreeg en leverde alleen maar fouten op. Daarom mijn suggestie om te kijken naar de code in de post van 27-12-2007 20:22

Groet en HEEL erg bedankt alvast!
 
Laatst bewerkt:
Alleen het rode en het blauwe balletje komen op het scherm bij het starten van de applicatie zoals te zien is op het screenshot. Zodra ik op de knop klik gebeurd er niks.


Groet,

Suikerklontje

- edit -

Bij het gebruik van EXACT die code gaat het mis en komt er geen tweede balletje op het scherm.

Hier bedoelde ik 3-de balletje.
 
Laatst bewerkt:
Als je van de JPanel een JFrame maakt en de paintComponent omzet naar een paint dan wil hij bij mij goed.

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

class Paneel13_2 extends JFrame {
    
    private Timer timer;
    private JButton plus;
    private ArrayList<Bal> _balLijst = new ArrayList<Bal>();
    private int _XPos = -50;
    private int _YPos = 0;
    
    public Paneel13_2() {
        {
            this.setSize(500,500);
            _balLijst.add(new Bal(-100, 0, 10, Color.RED));
            _balLijst.add(new Bal(100, 25, 10, Color.BLUE));
            timer = new Timer(10, new TimerHandler());
            timer.start();
            plus = new JButton("+");
            plus.addActionListener(new PlusHandler());
            this.add(plus);
        }
    }
    
    public void paint(Graphics g) {
        super.paint(g);
        setBackground(Color.WHITE);
        plus.setBounds(125, 225, 100, 30);
        g.translate(200, 220);
        g.drawLine(-110, 10, 120, 10);
        for (int i = 0; i < _balLijst.size(); i++) {
            _balLijst.get(i).stuiter(g);
        }
    }
    
    class PlusHandler implements ActionListener {
        public void actionPerformed(ActionEvent e) {[COLOR="Red"]
            _YPos += 10;
            _XPos += 2;
            _balLijst.add(new Bal(_YPos, _XPos, 10, Color.YELLOW));[/COLOR]
        }
    }
    
    class TimerHandler implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            repaint();
        }
    }
}

Bij het rode stuk moet je er nog een limiet op zetten dat hij niet per ongeluk onder de lijn komt, want dat doet hij nu nog wel :)
 
Ik heb om het te proberen het bij mij proberen uit te voeren maar hij gaf de volgende error:
Code:
java.lang.NoClassDefFoundError: bal
Exception in thread "main"

Mijn edditor ga fout bij lijn 7, 14, 15, 30, 31 en 39
Hij onderstreepte de woordjes: bal en _ballijst.

Is er soms iets dat ik nog moet doen of welke naam moet ik geven aan het programma?
 
klopt.
Omdat je de Bal class dan nog niet aan je project toe hebt gevoegd.
Dit kan je in de startpost vinden.
 
Ow, ok je ik zie het.
Maar nu zegt hij als ik 1 van die 2 bestanden wil uitvoeren
Code:
selection does not contain a main type
 
Dat klopt ook :)

Omdat er nog een main methode in een van de classes moet.
Code:
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Paneel13_2().setVisible(true);
            }
        });
    }

Voeg die eens toe in de class: Paneel13_2
Dan doet hij het wel. :)


Maar uhm, je bent nu in de vraag van een ander bezig ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan