【问题标题】:In Jframe, why does my "getScreenSize()" only show as 19201080 and not the actual Jframe border size?在 Jframe 中,为什么我的“getScreenSize()”只显示为 19201080 而不是实际的 Jframe 边框大小?
【发布时间】:2017-10-05 14:33:35
【问题描述】:

我对此很陌生。当我手动更改 Jframe 边框大小时,它仍会在 "19201080" 处更新,我正在尝试获取实际的 Jframe 宽度和高度,因此我可以让我的 Circle 组件根据 jframe 屏幕大小更改大小,

CircleComponent 类

    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);



    }

}

圈类:

package advancedjava;
import java.awt.*;
import java.awt.geom.*;

/**
 *
 * @author eeu8c6
 */
public class Circle {
    private double xLeft;
    private double xRight;

    public Circle(double x, double y){
        xLeft = x;
        xRight = y;
    }

    public void draw(Graphics2D g2){
        Ellipse2D.Double circle = new Ellipse2D.Double(xLeft, xRight, 400, 400);
        g2.draw(circle);
    }

【问题讨论】:

  • 这是屏幕的大小——你的电脑显示器的像素。更重要的是,您应该先在 API 中查看此类问题,然后再提问,因为它们都已在 API 中得到解答。

标签: java swing jframe jcomponent screen-size


【解决方案1】:
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;
        //....

请记住,一个组件被“包含”在另一个容器中,该容器具有自己的大小,并且组件的大小也可能受到布局约束的影响。

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

如果您想将窗口大小调整为显示器的最大可用大小,您可以简单地使用Frame#setExtendedState 并传递JFrame#MAXIMIZED_BOTH,这将根据操作系统的要求简单地最大化窗口

【讨论】:

    【解决方案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(); 的大小

    【讨论】:

    • 我已经在我的查看器类中实例化了框架,但它不允许我使用“frame.getScreenSize();”在我的 CircleComponent 类中,我也需要它来改变我的圆圈的大小。我已更新显示查看器类
    • @Alex:再次,请检查 API。 JFrame 没有该方法——查找要使用的适当方法(提示:在 JFrame API 中搜索包含“size”一词的方法)。不应使用此站点来代替您进行一些研究,而 API 应有尽有。
    猜你喜欢
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2011-01-30
    • 2014-03-01
    相关资源
    最近更新 更多