代码之家  ›  专栏  ›  技术社区  ›  Alex

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

  •  -2
  • Alex  · 技术社区  · 7 年前

    我对这个很陌生。当我手动更改Jframe边框大小时,它仍然更新为“19201080”,我试图获得实际的Jframe宽度和高度,以便我能够让我的圆形组件根据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);
        }
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   MadProgrammer    7 年前
    Toolkit kit = Toolkit.getDefaultToolkit(); 
    Dimension screenSize = kit.getScreenSize(); 
    

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

    我试图得到Jframe的实际宽度和高度,这样我就可以根据Jframe的屏幕大小改变圆形组件的大小

    然后打电话 getWidth getHeight 在组件上。组件表示可用的可见绘制范围,任何较大的部分都不会显示(将被剪裁)

    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
  •  2
  •   XtremeBaumer    7 年前
    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();