1
我有一个包含几个简单形状的Ellipse2Ds的JFrame。我想调整框架的大小以适合尺寸为(240, 240)
的对象包含几个Graphics2D对象的JFrame.pack()阻止包含对象的可见性
当我打包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底部的右边填充。看起来像这样。
我将编辑顶部以显示剩余的代码减去我绘制的形状。 – Supernovah
@Supernovah:在审查您发布的代码之后,我的建议保持不变,除非您想要放弃所有的JPanel的'paintComponent(...)'方法,而不是它的'paint(...)'方法Swing图形的好处。 –
也正如你可以看到在三个连续注释行,应该设置框架的优先大小不?被迫成为'(240,240)'。但它仍然提出设置为“(240,240)”而不是内部的外部尺寸。 – Supernovah