我有一个包含几个简单形状的JFrame,它们是Ellipse2D。我希望框架调整大小以贴合尺寸为(240, 240)
的对象
当我打包JFrame时,它的大小调整为最小窗口大小,而不是包含对象的大小。
我还应该说,如果我在JFrame上使用setSize(240, 240)
,它会设置外部窗口大小,而不是所包含对象的大小,因此Windows UI覆盖了所包含的Graphics2D对象的一半。
如何相对于包含的Graphics2D对象的大小调整JFrame的大小。我发现他们没有方法setPreferredSize()
,这使得这个奇怪的复杂。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GUIMain extends JPanel{
private int maxwidth = 240;
@Override
public Dimension getPreferredSize() {
return new Dimension(maxwidth, maxwidth);
}
@Override
public void paintComponent( Graphics g )
{
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
float i;
float imax = 4;
Ellipse2D.Double circle = new Ellipse2D.Double();
for( i = imax; i > 0; i--){
circle.width = (int)maxwidth*(i/imax);
circle.height = (int)maxwidth*(i/imax);
circle.x = (maxwidth/2)-(circle.width/2);
circle.y = (maxwidth/2)-(circle.width/2);
if((i % 2) == 0){
g2d.setColor(Color.red);
}else{
g2d.setColor(Color.blue);
}
g2d.fill(circle);
}
}
public static void main(String[] args) {
JFrame frame = new JFrame("Lame...");
frame.add(new GUIMain());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.setSize(maxwidth, maxwidth);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setResizable(false);
}
}
编辑:好了,现在我修改了上面的代码。除了窗口在12px底部右边有填充。看起来像这样。
答案 0 :(得分:4)
您可能不是直接在JFrame中绘制Ellipse2D对象,而是在JFrame显示的JPanel的paintComponenet(...)
方法中绘制。您需要覆盖此JPanel的getPreferredSize()
,以便计算并返回允许显示所有省略号的Dimension。