ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 为什么getSize()在这里不能为我工作以及为什么在调整大小时闪烁?

2019-06-21 02:49:38  阅读:223  来源: 互联网

标签:java swing doublebuffered


这是我第一次尝试使用BufferStrategy,我真的很感激一些提示.

1)为什么在下面的代码中,getSize()在调整窗口大小之前返回0的维度?如何立即检测窗口的大小?

2)为什么getSize()返回的东西不是窗口的完整尺寸? IE为什么底部和右边都有一条黑色条带?

3)调整窗口大小时有没有办法摆脱闪烁?

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class BSTest extends JFrame {
    BufferStrategy bs;
    DrawPanel panel = new DrawPanel();

    public BSTest() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(800,420);
        setLocationRelativeTo(null);
        setIgnoreRepaint(true);
        setVisible(true);
        createBufferStrategy(2);
        bs = getBufferStrategy();
        panel.setIgnoreRepaint(true);
        add(panel);
        panel.drawStuff();
    }

    public class DrawPanel extends JPanel {
        public void drawStuff() {
            while(true) {
                try {
                    Graphics2D g = (Graphics2D)bs.getDrawGraphics();
                    g.setColor(Color.BLACK);
                    System.out.println("W:"+getSize().width+", H:"+getSize().height);
                    g.fillRect(0,0,getSize().width,getSize().height);
                    bs.show();
                    g.dispose();
                    Thread.sleep(20);
                } catch (Exception e) { System.exit(0); }
            }
        }
     }

    public static void main(String[] args) {
        BSTest bst = new BSTest();
    }
}

解决方法:

>在调用validate()之前,JPanel的大小无效,通常是在包含Window上调用pack().
>最终尺寸是多种因素的综合结果,包括封闭组件的首选尺寸和特定外观和尺寸的面板UI代表.感觉.
>默认情况下,JPanel是双缓冲的;无需进一步努力. AnimationTest就是一个例子.

标签:java,swing,doublebuffered
来源: https://codeday.me/bug/20190621/1250947.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有