2013-05-19 3 views
0

В моей программе я использую cardLayout для переключения между панелями (каждая панель используется как отдельный класс). Одна из панелей, позволяет называть ее доской, содержит графику.Позиционирование графики или jpanel в центре окна при изменении размера

Как я понимаю, размер панели соответствует размеру окна или jframe, поэтому, когда я изменяю размер окна jpanel и графику, он также изменяется в размере.

Как я могу позиционировать графику в центре окна при изменении размера? Или как я понимаю, как я могу позиционировать jpanel в центре, так что графику, которая она содержит, будет также расположена в центре окна?

Моя графика, которую я использую в программе, может быть простой квадратной сеткой (которая фиксируется в количестве ячеек), вот код, COLS и ROWS являются константами, в то время как размер (размер ячейки) настраивается на размер окно и может быть изменен:

 g.setColor(Color.LIGHT_GRAY); 
     for(int i = 1; i < COLS; i ++){ 
      for(int j = 1; j < ROWS; j ++){ 
       g.drawLine(0, j*SIZE, COLS*SIZE, j*SIZE); 
       g.drawLine(i*SIZE, 0, i*SIZE, ROWS*SIZE); 
      } 
     } 

ответ

1

Возможные решения:

  • Получить ширину и высоту вашего JPanel изнутри метода paintComponent и использовать эту информацию, чтобы масштабировать графику.
  • Гнездо вашего рисунка JPanel внутри другого JPanel, «обертки» JPanel, который использует GridBagLayout. Если на чертеже JPanel добавлен и без GridBagConstraints, он останется централизованным в обертке JPanel.
+0

tnx для решения, я попробую второй вариант – NGix

+0

@ Ir0nm: удачи в этом! –

0

Если я хочу нарисовать линию некоторой длины, которая центрирована, я определяю, насколько велика по ширине эта вещь, которую я рисую. если его 50 и моя ширина панели составляют 800, я делаю 400 - 25 или 375 в качестве начала начала рисования. так что вместо того, чтобы рисовать из 0, я рисую с начала начала. Если я рисую 8 вещей бок о бок, и я хочу, чтобы весь 8 был центрирован, я получаю полный размер, который заполняется, как размер того, что я рисую, и снова выясняю, сколько места у меня вокруг и на каждом столбце Я рисую его так сильно.

+0

Я не могу этого сделать, потому что я использую ограничения сетки, и мне нужно пересчитать положение каждой границы, и это слишком сложно, и многие вычисления – NGix

+0

ну в цикле я хочу, чтобы моя строка начиналась с i * size, я переписываю это как смещение + i * размер. поэтому, если x увеличивается до 25, каждый раз размер увеличивается, все перемещается. – LanternMike

+0

Если у вас есть 400 мест вокруг всей серии предметов, которые вы рисуете горизонтально, ваше смещение равно 200. Если у вас есть размер 25, а не нарисуйте 0, 25, 50, добавив смещение, а затем сделав + i * размер, который вы печатаете 200 225 250 и т. Д. – LanternMike

Смежные вопросы