2017-01-23 8 views
1

Я новичок в программировании. Я не уверен, как поместить объект в центр кадра. Вот как я догадался:Как установить объект в центре кадра?

public class LetSee extends JPanel { 

    public void paintComponent(Graphics g) { 

      int row; // Row number, from 0 to 7 
      int col; // Column number, from 0 to 7 
      int x,y; // Top-left corner of square 
      for (row = 0; row < 5; row++) { 

      for (col = 0; col < 5; col++) { 
       x = col * 60; 
       y = row * 60; 
       if ((row % 2) == (col % 2)) 
        g.drawRect(x, y, 60, 60); 

       else 
        g.drawRect(x, y, 60, 60); 

      } 

      } // end for row 

     } 
} 



public class LetSeeFrame extends JFrame { 

    public LetSeeFrame(){ 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setSize(1900, 1000); 
     setVisible(true); 
     LetSee let = new LetSee(); 
     let.setLayout(new BorderLayout()); 
     add(let,BorderLayout.CENTER); 
     setLocationRelativeTo(null); 
    } 

    public static void main(String[] args) { 
     LetSeeFrame l = new LetSeeFrame(); 
    } 
} 
+0

ли вы имеете в виду «центр», как в макете границы, или «центр», как в геометрическом центре фактического? –

+0

Не забудьте вызвать 'super.paintComponent', прежде чем выполнять какую-либо обычную роспись, странные вещи начнут поступать неправильно, если вы этого не сделаете. Также 'paintComponent' не нуждается в' public', никто не должен его называть напрямую – MadProgrammer

+0

См. Также [этот ответ] (http://stackoverflow.com/a/7181197/418556) - но это зависит от настраиваемого компонента возвращая логический предпочтительный размер. –

ответ

2

На самом деле ваша панель центрирована в рамке, но то, что она рисует, нет.

Вы должны использовать width и heightJPanel, чтобы центрировать чертеж.

Также укажите ваши размеры и цифры в переменные, он менее подвержен ошибкам при использовании их несколько раз в коде.

Наконец, как сказал @MadProgrammer в комментариях:

Не забудьте позвонить super.paintComponent, прежде чем делать какие-либо пользовательские картины, странные вещи начинают делать неправильно, если вы этого не сделаете. Также paintComponent не нужно быть публичной, никто никогда не должен называть его непосредственно

import java.awt.Graphics; 

import javax.swing.JPanel; 

public class LetSee extends JPanel { 

    public void paintComponent(final Graphics g) { 

     super.paintComponent(g); 

     int row; // Row number, from 0 to 7 
     int col; // Column number, from 0 to 7 
     int x, y; // Top-left corner of square 

     int maxRows = 5; 
     int maxCols = 5; 

     int rectWidth = 60; 
     int rectHeight = 60; 

     int maxDrawWidth = rectWidth * maxCols; 
     int maxDrawHeight = rectHeight * maxRows; 

     // this is for centering : 
     int baseX = (getWidth() - maxDrawWidth)/2; 
     int baseY = (getHeight() - maxDrawHeight)/2; 

     for (row = 0; row < maxRows; row++) { 

      for (col = 0; col < maxCols; col++) { 
       x = col * rectWidth; 
       y = row * rectHeight; 
       if ((row % 2) == (col % 2)) { 
        g.drawRect(baseX + x, baseY + y, rectWidth, rectHeight); 
       } else { 
        g.drawRect(baseX + x, baseY + y, rectWidth, rectHeight); 
       } 

      } 

     } // end for row 

    } 
} 
+0

Отлично! Tnx <3: D Вы спасли меня много времени :) – getXgetY

+0

Добро пожаловать :) – Berger