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