Обратите внимание на класс Graphics2D, он предназначен именно для того, что вы пытаетесь сделать, и лучше подходит для рисования, чем обычный метод paintComponent
. Вы можете прочитать о том, как использовать Graphics2D здесь .
Во-первых, обратите внимание, что вы не можете иметь объект Graphics2D
без приведения его из объекта Graphics
, как я это делал здесь Graphics2D g2 = (Graphics2D) g;
.
Это пример, который должен помочь вам получить начал, имейте в виду, что я использую абсолютный макет, так что нет менеджера макета. Это код, который я использовал для создания игры в блэкджек, поэтому имена не являются обобщенными c.
Также я добавил сглаживание, чтобы ваши фигуры с Graphics2D выглядели очень хорошо, а методы центрировали фигуры на экран, который, вероятно, будет хорошо работать с вашими JPanels.
Обратите внимание, как я создал определенные c методы для объектов Graphics2D, которые я хотел нарисовать, а затем нарисовал их с помощью класса Graphics. Мне показалось, что это работает лучше всего, так что мой paintComponent
был не просто завален бесконечным повторяющимся кодом. frame
в моем коде получал ширину и высоту JFrame
У меня был JPanel
, так что вы просто обратитесь к JPanel
, вместо которого вы бы его взяли.
class DrawTable extends JPanel
{
DrawTable()
{
super();
System.out.println("Looks good to me pal!");
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
//Setup background
drawRectangle(g, Color.BLACK,
frame.getWidth() / 2, frame.getHeight() / 2,
frame.getWidth(), frame.getHeight());
// Create table at center
drawRectangle(g, new Color(206, 187, 158),
frame.getWidth() / 4, frame.getHeight(), //left table leg
50, 600);
drawRectangle(g, new Color(206, 187, 158),
frame.getWidth() / 1.5, frame.getHeight(), //right table leg
50, 600);
drawEllipse(g, new Color(153, 154, 104),
frame.getWidth() / 2, frame.getHeight() / 2, //Draws outer circle
1200, 400);
drawEllipse(g, new Color(53, 101, 77),
frame.getWidth() / 2, frame.getHeight() / 2, //Draws inner circle
1125, 350);
}
private void drawEllipse(Graphics g, Color color, double x, double y, double width, double height) //centers ellipse
{
Graphics2D g2 = (Graphics2D) g;
double centerX = (double) x - width / 2;
double centerY = (double) y - height / 2;
Ellipse2D ellipse = new Ellipse2D.Double(centerX, centerY, width, height);
RenderingHints render = new RenderingHints(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
render.put(
RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g2.setRenderingHints(render);
g2.setColor(color);
g2.fill(ellipse);
g2.draw(ellipse);
}
private void drawRectangle(Graphics g, Color color, double x, double y, double width, double height) //centers rectangle
{
Graphics2D g2 = (Graphics2D) g;
double centerX = (double) x - width / 2;
double centerY = (double) y - height / 2;
Rectangle2D rect = new Rectangle2D.Double(centerX, centerY, width, height);
RenderingHints render = new RenderingHints(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
render.put(
RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g2.addRenderingHints(render);
g2.setColor(color);
g2.fill(rect);
}
}
Дайте мне знать, если вам нужна дополнительная помощь!