Как нарисовать заполненный квадрат в Java, который находится точно в центре окна апплета? - PullRequest
1 голос
/ 31 января 2010

Как вы рисуете заполненную квадратную рамку в Java, которая находится точно в центре окна апплета? а при изменении размера окна оно центрируется по горизонтали и вертикали в окне апплета? Я хочу, чтобы он адаптировался к высоте экрана по вертикали, но оставался квадратным даже при горизонтальной ширине краев. Если размер окна будет слишком узким, то стороны могут обрезаться?

Ответы [ 3 ]

2 голосов
/ 31 января 2010

Вот пример панели, которая будет делать квадрат размером 30px посередине или изменять его размер с помощью панели. Возможно, это может дать вам достаточно, чтобы добиться прогресса.

  private class MyPanel extends JPanel{
    int height = 30;//30 pixels high.
    int width = 30;//30 pixels wide.
    boolean resize = true;


    @Override
    protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      int verticalCenter = this.getHeight()/2;
      int horizontalCenter = this.getWidth()/2;

      if(!resize){
        int topLeftSquareCornerY = verticalCenter - (height/2);
        int topLeftSquareCornerX = horizontalCenter - (width/2);

        g.setColor(Color.BLUE);
        g.drawRect(topLeftSquareCornerX, topLeftSquareCornerY, width, height);
      }else{
        g.setColor(Color.GREEN);
        g.drawRect(15,15,(this.getWidth()-30), this.getHeight()-30);
      }
    }
  }
1 голос
/ 01 февраля 2010

Я предполагаю, что вы хотите нарисовать квадрат с фиксированным size, который остается в center панели при изменении размера панели. Один из подходов к таким проблемам - начать с конца и работать задом наперед. Вы знаете о fillRect(), поэтому запишите, что вам нужно, чтобы «заполнить пробелы», требуемые этим методом. Назовите center координаты x и y. Верхний угол будет на половину size вверх, а левый угол - на половину size влево; ширина и высота квадрата будут просто size:

g.fillRect(left,       top,        width, height);
g.fillRect(x - size/2, y - size/2, size,  size);

Теперь вернитесь назад и выясните, что x и y - это половина ширины и высоты панели соответственно:

int x = getWidth() / 2;
int y = getHeight() / 2;

Теперь соберите все вместе в вашем paintComponent() методе.

1 голос
/ 31 января 2010

Похоже, ваша основная проблема - выяснить, как правильно разместить данный прямоугольник. Вам нужно иметь середину экрана в середине прямоугольника.

Расстояние от середины прямоугольника до его сторон равно половине высоты и длины соответственно.

То есть x1, x2 = middle_x ± ширина / 2 и y1, y2 = middle_y ± высота / 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...