Это оказалось сложнее, чем я думал.Я просто учусь и возлюсь с функцией рисования.Я хочу, чтобы программа запускала окно, которое содержит, скажем, прямоугольник.Размер этого прямоугольника будет масштабироваться по размеру окна (т. Е. Если окно имеет размер 1000px, а прямоугольник настроен на масштабирование в 90%, прямоугольник будет 900px).У меня есть математика, выясняющая, как отцентрировать его и определить его размер, но с помощью заглушек я обнаружил, что при использовании object.getWidth () и height и т. Д. Каждый раз возвращается 0, полностью отбрасывая математику дляsizing.
Подумав некоторое время, я предполагаю, что это потому, что он пытается получить ширину и высоту от объекта, который все еще строится.По моей собственной логике, до тех пор, пока вы выполняете математику после частей сборки конструктора, все должно быть хорошо, но, увы, я, похоже, ошибаюсь.
Я пытался создать отдельные классы, которые создают фрейми тот, который делает рисунок.Рисующий объект принимает JFrame как часть конструктора и пытается рисовать на нем.Я создаю каждый из них отдельно, сначала кадр, затем рисующий объект (отправляя ему объект кадра), но это тоже не работает.
Есть предложения?
РЕДАКТИРОВАТЬ:
По предложению Эндрю.Вот мой объект панели, который нужно добавить в окно
package scaling_test;
import java.awt.*;
import javax.swing.*;
public class MyDrawing extends JPanel
{
public MyDrawing() throws HeadlessException
{
this.setVisible(true);
}
public void paintComponent(Graphics g)
{
super.paintComponents(g);
//set scaling
int usrScale = 90;
int scaleRef = (100 - usrScale) / 2;
int xStart = this.getWidth() * (scaleRef / 100);
int yStart = this.getHeight() * (scaleRef / 100);
int width = (usrScale / 100) * this.getWidth();
int height = (usrScale / 100) * this.getHeight();
//draw square outline
g.setColor(Color.green);
g.fillRect(xStart, yStart, width, height);
}
}
И это окно, добавляющее этот объект jpanel:
package scaling_test;
import java.awt.*;
import javax.swing.*;
public class DrawThis extends JFrame
{
MyDrawing drawing;
public DrawThis() throws HeadlessException
{
drawing = new MyDrawing();
this.add(drawing);
}
}
И модуль запуска
package scaling_test;
public class ScaleTest
{
public static void main(String[] args)
{
DrawThis program = new DrawThis();
program.setBounds(250, 250, 800, 600);
program.setVisible(true);
}
}
Обновленная панель (все еще не работает):
package scaling_test;
import java.awt.*;
import javax.swing.*;
public class MyDrawing extends JPanel
{
public MyDrawing() throws HeadlessException
{
}
public void paintComponent(Graphics g)
{
super.paintComponents(g);
//set scaling
int usrScale = 90;
int scaleRef = (100 - usrScale) / 2;
int xStart = this.getWidth() * scaleRef / 100;
int yStart = this.getHeight() * scaleRef / 100;
int width = usrScale * this.getWidth() / 100;
int height = usrScale * this.getHeight() / 100;
//draw square outline
g.setColor(Color.green);
g.fillRect(xStart, yStart, width, height);
}
}