Как мне найти точный размер моего JFrame? - PullRequest
0 голосов
/ 22 марта 2019

В настоящее время я пытаюсь использовать paintComponent, чтобы нарисовать квадрат в середине моего JFrame поверх JPanel.Размер моего фрейма 600 х 600, но когда я пытаюсь нарисовать квадрат с Xcoordinate = 300 и Ycoordinate = 300, квадрат на самом деле даже не близко к середине моего фрейма.

Я что-то не так делаю?Это для школьного проекта, поэтому любые советы также будут оценены.Заранее спасибо!

Напишите полную рабочую программу, которая рисует квадрат в середине кадра.Когда пользователь нажимает на квадрат (щелчок левой кнопкой мыши), он заменяет его на 4 меньших квадрата, нарисованных в отдельных квадрантах, каждый из которых составляет четверть размера исходного квадрата и имеет случайный цвет.Если пользователь щелкает (щелчок правой кнопкой мыши) по любому квадрату, он удаляется / удаляется из фрейма.

Если пользователь остается неактивным в течение 15 секунд (то есть перестает щелкать), все квадраты должны начать отходить от центра(любая скорость в порядке, перекрытия в порядке, но не предпочтительны.) Если квадраты, поразить края, они снова удаляются. Если пользователь нажимает «S», квадраты перестают двигаться. Кадр очищается, когда пользователь нажимает клавишу «Удалить» трираз в быстрой последовательности (в течение 3 секунд), и вы начинаете все сначала.

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

Мой класс фреймов:

import javax.swing.*;
import java.awt.*;

public class SquareFrame extends JFrame {
    private final int WIDTH = 600, HEIGHT = 600;
    private final Dimension frameSize;
    private SquarePanel panel;
    public SquareFrame(){
        panel = new SquarePanel();
        frameSize = new Dimension(WIDTH,HEIGHT);
        this.setTitle("Sqaures");
        this.setSize(frameSize);
        this.getContentPane().add(panel);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.setVisible(true);
    }

public static void main(String[] args){
    SquareFrame frame = new SquareFrame();
}
}

Класс моей панели:

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class SquarePanel extends JPanel implements MouseListener {

    public SquarePanel(){
        this.setBackground(Color.BLACK);
        this.setFocusable(true);
        this.setVisible(true);
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Square test = new Square();
        g.setColor(Color.WHITE);
        g.drawRect(test.x,test.y,test.width,test.height);
    }

    @Override
    public void mouseClicked(MouseEvent e) { }

    @Override
    public void mousePressed(MouseEvent e) { }

    @Override
    public void mouseReleased(MouseEvent e) { }

    @Override
    public void mouseEntered(MouseEvent e) { }

    @Override
    public void mouseExited(MouseEvent e) { }
}

Класс моей площади:

import java.awt.*;

public class Square extends Rectangle {
    public Square(){
        this.height = 100;
        this.width = 100;
        this.x = 300;
        this.y = 200;
    }
}

1 Ответ

0 голосов
/ 22 марта 2019

Напишите полную рабочую программу, которая рисует квадрат в середине кадра.

Ну, я думаю, что это ужасное требование.Рамка содержит строку заголовка и 4 рамки.Поскольку рамка сжимается в размере, вы не сможете рисовать квадрат в строке заголовка.

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

открытый класс Square расширяет Rectangle {

Почему вы расширяете Rectangle?

Если вам нужна информация x, y, width, height, тогда вы просто используете метод getBounds() класса Rectangle для получения информации.

Однако вы невам нужны значения x / y.

Если вы хотите отцентрировать прямоугольник, то вам нужно динамически вычислять значения x / y, как вы делаете свое собственное рисование, основываясь на текущем размере панели.

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

Dimension d = new Dimension(100, 100); 

Затем, чтобы отцентрировать прямоугольник на панели, вам нужно знать ширину панели и ширину прямоугольника, чтобы вычислить место для рисования прямоугольника:

int x = (getWidth() - d.getWidth()) / 2;
int y = ...
g.drawRect(x, y, d.width, d.height);
...