Спасайте кто может - проблема с прорисовкой UI в SWING.
От: Rienol  
Дата: 16.05.07 18:20
Оценка:
Мне нужно нарисовать игральную доску из шестиугольников в 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); 
    }
}

Ленивому автору, подсветка кода в подарок от модератора.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.