Archief - [JAVA] Y waarde stijgt indien...

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.

ZackWhite

Legacy Member
Ik ben bezig aan klein programma waar bij het invoeren van een 'aantal', hetzelfde aantal cirkels wordt weergegeven.

Nu na een bepaald aantal cirkels zou de Y waarde moeten stijgen en de x-waarde terug naar zijn originele waarde moeten veranderen.

ik vertrek daarvoor vanuit dit stukje code:

Code:
for (teller2 = 1; teller2 <= intEi; teller2++) {
     g.setColor(Color.PINK);
     g.fillOval(((intEiw + 5) * teller2) + (23 - (intEiw + 5)), intEiy, intEiw, tEih);
}

intEi = zelf in te vullen aantal
intEiw = de breedte van de cirkel
intEih = de hoogte van de cirkel
intEiy = de y-waarde van de cirkel

Nu verschijnen ze natuurlijk allemaal op 1 rij, maar verder geraak ik niet, behalve dat ik dan vermoed dat ik ergens de x-waarde zou moeten kunnen uitlezen, en als die groter is dan een bepaal getal, deze terug op de standaardwaarde springt, en de y-waarde vergroot. (dit met behulp van 'if...' wss?)

Maar ik zie niet hoe ik daar aan zou komen. Iemand die mij zou kunnen helpen?

mvg

Fraggie

Legacy Member
Uiteindelijk geef je het antwoord toch al zelf? Hop hop met de beentjes je bent er bijna! :P

Zou een andere optie niet kunnen zijn dat je componenten van een bepaalt type toevoegt (gezien het nu toch allemaal roze ovalen zijn) en ze gewoon laat uitlijnen door de standaard lay-out manager? Dan heb je al direct een dynamisch gedrag (bv. resizen van je window) in je programma zitten waarvoor je eigenlijk niets moet doen.

Jerre Muesli

Legacy Member
Persoonlijk zou ik toch je variabelnamen eens herzien :)
Het overzicht is onschatbaar beter met deftige namen. bvb:

Code:
for(count = 0; count < circleCount; count++) {
     g.setColor(Color.PINK);
     g.fillOval(((circleWidth + 5) * count) + (23 - (circleWidth + 5)), circlyY, circleWidth, circleHeight);
}

Puur om je te helpen natuurlijk, niet om te mierenneuken.

Timmos

Legacy Member
Code:
/**
 *
 * @author Timmos
 */
public class CirclePanel extends JPanel {

    private final static int TOTAL_HORIZONTAL_CIRCLES = 5;
    private int circleCnt = 23;
    private int circleDiam = 50;

    public CirclePanel() {
    }

    @Override
    public void paint(Graphics g) {
        Graphics2D gg = (Graphics2D) g;
        Map map = new HashMap();
        map.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        gg.addRenderingHints(map);



        for (int count = 0; count < circleCnt; count++) {
            int xCo = (count % TOTAL_HORIZONTAL_CIRCLES) * circleDiam;
            int yCo = (count / TOTAL_HORIZONTAL_CIRCLES) * circleDiam;

            gg.setColor(Color.PINK);
            g.fillOval(xCo, yCo, circleDiam, circleDiam);
            gg.setColor(Color.BLACK);
            g.drawOval(xCo, yCo, circleDiam, circleDiam);
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        JFrame frame = new JFrame("Cute Circle Program");

        frame.setContentPane(new CirclePanel());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

Timmos

Legacy Member
Had eens zin in wat Java :p

Een volledig programma waarin je met een spinner meteen het aantal bollen kan instellen.
Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/**
 *
 * @author Timmos
 */
public class CirclePanel extends JPanel implements ChangeListener {

    private final static int TOTAL_HORIZONTAL_CIRCLES = 5;
    private int circleDiam = 50;
    private SpinnerNumberModel model;

    public CirclePanel(SpinnerNumberModel model) {
        this.model = model;
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D gg = (Graphics2D) g;
        Map map = new HashMap();
        map.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        gg.addRenderingHints(map);

        for (int count = 0; count < ((Integer) model.getValue()).intValue(); count++) {
            int xCo = (count % TOTAL_HORIZONTAL_CIRCLES) * circleDiam;
            int yCo = (count / TOTAL_HORIZONTAL_CIRCLES) * circleDiam;

            gg.setColor(Color.PINK);
            g.fillOval(xCo, yCo, circleDiam, circleDiam);
            gg.setColor(Color.BLACK);
            g.drawOval(xCo, yCo, circleDiam, circleDiam);
        }
    }

    public void stateChanged(ChangeEvent e) {
        repaint();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        JFrame frame = new JFrame("Cute Circle Program");

        JPanel contentPanel = new JPanel();
        SpinnerNumberModel model = new SpinnerNumberModel(7, 0, 100, 1);
        JSpinner spinner = new JSpinner(model);
        CirclePanel circlePanel = new CirclePanel(model);

        spinner.addChangeListener(circlePanel);

        contentPanel.setLayout(new BorderLayout());



        contentPanel.add(circlePanel, BorderLayout.CENTER);
        contentPanel.add(spinner, BorderLayout.PAGE_END);

        frame.setContentPane(contentPanel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // frame.pack();
        frame.setVisible(true);
    }
}
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