我正在尝试制作一个在a的中心绘制一个圆JFrame
并使用绘制圆的程序paintComponent
。我的目标是即使将JFrame
调整大小,也要使圆在框架中居中。我尝试过并搜索了不同的东西,但是没有任何效果。我猜我必须使用repaint()
和计时器,但不知道到底有多精确。我的代码如下:
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ImageFrame extends JFrame {
private static final long serialVersionUID = 1L;
int width = 40;
int height = 40;
int x;
int y;
JPanel panel = new JPanel() {
private static final long serialVersionUID = 2L;
public void paintComponent(Graphics g) {
super.paintComponents(g);
g.drawOval(x, y, width, height);
}
};
public ImageFrame() {
add(panel);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 300);
x = (getWidth()/2) - (width/2)-20;
y = (getHeight()/2) - (height/2)-40;
setLocationRelativeTo(null);
setVisible(true);
}
}
更新:
我已经添加了TrashGod的方法,但是它说要删除@Override
,然后如果运行了,则JFrame
打开但没有圆圈。代码在下面,我已经paintComponent
从旧代码中删除了。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ImageFrame extends JFrame implements {
private static final long serialVersionUID = 1L;
public ImageFrame() {
addMouseListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
setVisible(true);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Dimension size = this.getSize();
int d = 200;
int x = (size.width - d) / 2;
int y = (size.height - d) / 2;
g.fillOval(x, y, d, d);
g.setColor(Color.blue);
g.drawOval(x, y, d, d);
}
}
本示例使圆心居中,并将尺寸调整为较小的尺寸,但是您可以将其设为d
常数。基本步骤是相对于面板的当前大小进行渲染。调整包围框的大小以查看效果。添加RenderingHints
,看到这里,让绘图浓烟。
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Dimension size = this.getSize();
int d = 200;
int x = (size.width - d) / 2;
int y = (size.height - d) / 2;
g.fillOval(x, y, d, d);
g.setColor(Color.blue);
g.drawOval(x, y, d, d);
}
更改示例:
$ diff OldSwingPaint.java SwingPaint.java
38a39,41
> Graphics2D g2d = (Graphics2D) g;
> g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
> RenderingHints.VALUE_ANTIALIAS_ON);
40c43
< int d = Math.min(size.width, size.height) - 10;
---
> int d = 200;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句