在Jframe中,为什么我的" getScreenSize()"仅显示为19201080而不是实际的Jframe边框大小?

时间:2017-10-05 14:33:36

标签: java swing jframe jcomponent screen-size

我对此很陌生。当我手动更改Jframe边框大小时,它仍会更新为" 19201080" ,我试图获得实际的Jframe宽度和高度,以便我能够根据jframe屏幕大小更改Circle组件的大小,

CircleComponent类

git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>

圆圈类:

    package advancedjava;
import java.awt.*;
import javax.swing.JComponent;
import java.awt.Toolkit;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Ellipse2D.Double;
/**
 *
 * @author eeu8c6
 */
public class CircleComponent extends JComponent{

    @Override
    public void paintComponent(Graphics g){
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();

        int width = screenSize.width;
        int height = screenSize.height;


        System.out.println("test: " + width + height);
        double swidth = width * 0.8;
        double sheight = height * 0.8;
        Graphics2D g2 = (Graphics2D) g;



        Circle c1 = new Circle(50, 50);
        g2.setPaint(Color.RED);
        c1.draw(g2);
        Ellipse2D ellipse = new Ellipse2D.Double();
        g2.fill(ellipse);



    }

}

2 个答案:

答案 0 :(得分:3)

Toolkit kit = Toolkit.getDefaultToolkit(); 
Dimension screenSize = kit.getScreenSize(); 

这是一种糟糕的方法,它没有考虑其他屏幕元素,如任务栏和停靠栏,然后可以在应用程序的顶部显示

  

我试图获取实际的Jframe宽度和高度,以便我能够根据jframe屏幕尺寸更改Circle组件的大小

然后在组件上调用getWidthgetHeight。该组件代表您可用的可见绘画范围,任何更大的赢取都不会显示(将被裁剪)

public class CircleComponent extends JComponent{

    @Override
    public void paintComponent(Graphics g){
        int width = getWidth().width;
        int height = getHeight().height;
        //....

请记住,一个组件是&#34;包含&#34;在另一个容器中,它有自己的大小,组件的大小也可能受到布局限制的影响。

框架也由其他元素(框架边框和标题栏)组成,这些元素会减损应用程序可用的可视空间

如果您希望调整窗口的最大可用大小,您可以简单地使用Frame#setExtendedState并将其传递给JFrame#MAXIMIZED_BOTH,这样可以根据操作系统的要求最大化窗口< / p>

答案 1 :(得分:2)

Toolkit kit = Toolkit.getDefaultToolkit(); 
Dimension screenSize = kit.getScreenSize(); 

Gets the size of the screen. On systems with multiple displays, the primary display is used. Multi-screen aware display dimensions are available from GraphicsConfiguration and GraphicsDevice.

描述

工具包为您提供物理屏幕大小。获取JFrame来电frame.getSize();

的大小