Archief - [PROG]JAVA Problemen met size van jPanel

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.

Kikenie

Legacy Member
Hey iedereen,

ik ben bezig met een sudoku programma te maken maar ik zit al sinds het begin met een lastig probleem.
Een sudoku bestaat uit verschillende blokken (vb 3x3 blokken voor een standaard sudoku). Zo'n blok bestaat op zich uit verschillende vakken (vb 3x3 voor standaard sudoku). De grootte van zo'n blok bereken ik aan de hand van het aantal vakken en hun grootte, en vergelijkbaar bereken ik de grootte van de sudoku. Toch blijkt die grootte niet te kloppen. Op deze foto kan je het probleem zien. De oranje en groene stukken tonen waar de problemen zitten.
Hieronder staat de code (sterk vereenvoudigd tot wat echt nodig is).

Nog ter info, een vak erft over van jLabel, blok en sudoku erven over van jPanel.


Code:
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.*;
import javax.swing.border.LineBorder;

public class Sudoku extends JPanel{

    public Sudoku(int cols, int rows) {
        this.setBorder(new LineBorder(Color.BLACK));
        this.setLayout(new GridLayout(rows,cols));
        int breedte = Constanten.ZijdeVak * rows * cols;
        int hoogte = Constanten.ZijdeVak * rows * cols;
        for(int i=0;i<rows*cols;i++){
            this.add(new Blok(cols,rows));
        }
        this.setBackground(Color.ORANGE);
        this.setSize(breedte,hoogte);

    }
    
    public class Blok extends JPanel{
        public Blok(int cols, int rows) {
            this.setLayout(new GridLayout(cols,rows));
            this.setBorder(new LineBorder(Color.BLACK));
            this.setBackground(Color.GREEN);
            for(int i=0;i<cols*rows;i++){
                this.add(new Vak());
            }
            this.setSize(cols*Constanten.ZijdeVak,rows*Constanten.ZijdeVak);
        }
    }
    
    public class Vak extends JLabel{
        public Vak(){
            this.setBackground(Color.WHITE);
            this.setOpaque(true);
            this.setBorder(new LineBorder(Color.BLACK));
            this.setSize(Constanten.ZijdeVak,Constanten.ZijdeVak);
        }
    }
    
    abstract class Constanten {
        protected static final int ZijdeVak = (35);
    }
}

De groene en oranje achtergrond zijn gezet om het probleem duidelijker te maken op de foto.

Ik dacht dat het probleem erin zat dat de border ook meegerekend werd in de breedte maar ik heb hiervoor al vanalles geprobeerd maar tot nu toe is het mij nog ni gelukt het in orde te krijgen.

Op voorhand bedankt voor de hulp.

Kikenie

_mobster_

Legacy Member
snap u probleem eigelijk niet echt ze, bij mij werkt u code, ik raad je wel aan om setPreferredSize(new Dimension(breedte,hoogte)) te gebruiken ipv setSize(breedte,hoogte)

Kikenie

Legacy Member
Het probleem is, dat zoals op deze foto, er een rand te zien is rechts en onderaan. Op de foto heb ik deze rand in het oranje en groen gezet.
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