いくつかの単純な形状を含む 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 の下部にパディングが表示されることを除いて。このように見えます。