Мне нужно нарисовать игральную доску из шестиугольников в SWING. У каждого шестиуголника есть своя модель и свое UI с переписанным paintComponent(). Когда я пытаюсь прорисовать для тестирования игральную доску определенных размеров, то прорисовывается одна единственная ячейка где-то посередине, хотя подтверждение на консоле присутствует для всех ячеек.
Я уже полностью отчаялась, может у кого возникнет идея.
package hexabang.ui;
import java.awt.*;
import javax.swing.*;
public class HexFieldUI extends JPanel{
private HexFieldModel myModel;
private int gameWidth=8; //X
private int gameHeight=8; //Y
private Polygon myShape;
private int myConstantSize=10;
public HexFieldUI(HexFieldModel hfModel)
{
myModel=hfModel;
myShape = new Polygon();
myShape = calculateMyShape(myModel.getX(),myModel.getY(), myConstantSize, myShape);
//setOpaque(false);
}
protected void getBestSize() {}
@Override
protected void paintComponent( Graphics g ){
Graphics2D g2d = (Graphics2D)g;
Dimension size = getSize();
int mySize = Math.min(size.width,size.height)/ (2*Math.max(gameWidth, gameHeight)+1) ;
System.out.println("mySize is " + mySize);
// myShape = recalculateMyShape(g,myModel.getX(),myModel.getY(), mySize, myShape);
g2d.setColor(Color.blue);
g2d.fillPolygon(myShape );
g2d.setColor(Color.black);
g2d.drawPolygon(myShape);
}
public boolean myShapeIsSelected(Point p) {
return myShape.contains(p);
}
public static Polygon calculateMyShape( int x, int y, int size, Polygon p)
{
// p.reset();
//Koordinati
if (y%2!=0) {
//point 0,0
p.addPoint(2*x*size, (y-1)*2*size);
// point 1,1
p.addPoint((2*x+1)*size, (2*y-1)*size);
// point 2,2
p.addPoint((2*x+1)*size, 2*y *size);
// point 3,3
p.addPoint(2*x*size,(2*y+1) *size);
// point 4,4
p.addPoint((2*x-1)*size,2*y *size);
// point 5,5
p.addPoint((2*x-1)*size, (2*y-1)*size);
}
//Koordinati
else {
//point 0,0
p.addPoint((2*x-1)*size, (y-1) *2*size);
// point 1,1
p.addPoint(2*x*size, (2*y-1) *size);
// point 2,2
p.addPoint(2*x*size, 2*y*size);
// point 3,3
p.addPoint((2*x-1)*size, (2*y+1)*size);
// point 4,4
p.addPoint((x-1)*2*size, 2*y*size);
// point 5,5
p.addPoint((x-1)*2*size, (2*y-1) *size);
}
return p;
}
public static void main( String[] args )
{
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
for (int i=1; i<= 8; i++) {
for (int j=1; j<= 8; j++) {
HexFieldModel hfieldModel = new HexFieldModel (i,j);
System.out.println("created Hexagon "+i+","+j);
f.add( new HexFieldUI(hfieldModel));
}
}
f.setSize( 400, 400 );
f.setVisible( true );
}
}
package hexabang.ui;
import javax.swing.*;
//HexField Controller
public class HexField {
private HexFieldModel myModel;
private HexFieldUI myUI;
//private
public HexField(int x, int y){
myModel = new HexFieldModel(x,y);
myUI = new HexFieldUI(myModel);
}
}
Ленивому автору, подсветка кода в подарок от модератора.