首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java图形,什么都没有显示

Java图形,什么都没有显示
EN

Stack Overflow用户
提问于 2015-03-23 00:50:07
回答 1查看 302关注 0票数 0

我可能做了一些非常愚蠢的事情,却看不到它,但我一直在试图将矩形的大小调整为条形图。代码符合,但在我的帧中什么也没有显示。完全空白。

代码语言:javascript
运行
复制
    package server2;

    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Rectangle;
    import javax.swing.JPanel;

@SuppressWarnings("serial")
public class Bar extends JPanel implements Runnable {

    int height = 0;
    Color barColor;
    Rectangle bar;
    Thread bartender;

    public Bar(int x, int y, Color barColor) {
        this.barColor=barColor;
        this.bar = new Rectangle(x, y, 15, this.height);
        this.bartender= new Thread(this);
    }

    public void update() {
        bar.setSize(this.bar.width, this.bar.height++);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g.create();
        g2d.setColor(this.barColor);
        g2d.fill(this.bar);
    }

    public void callBarTender() {
        this.bartender.notify();
    }

    @Override
    public void run() {
        for(int i = this.bar.height; i<this.height; i++ ) {
            try {
                update();
                repaint();
                Thread.sleep(30);
            } catch(Exception e) {
                System.out.println(e);
            }
        }
        try {
            this.bartender.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}
public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(400, 400);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        Bar bar1 = new Bar(200,200, Color.blue);
        bar1.setVisible(true);
        frame.add(bar1);
        bar1.height = 10;
        bar1.bartender.start();

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-23 00:59:27

改变...

代码语言:javascript
运行
复制
bar.setSize(this.bar.width, this.bar.height++);

代码语言:javascript
运行
复制
bar.setSize(this.bar.width, this.bar.height + 1);

代码语言:javascript
运行
复制
bar.setSize(this.bar.width, ++this.bar.height);

this.bar.height++的赋值是一种被忽略的后分配。

你也应该改变这两行的顺序..。

代码语言:javascript
运行
复制
bar1.setVisible(true);
frame.add(bar1);

因此,setVisible是在您准备好UI之后调用的。

您还应该考虑使用Swing Timer,它可以更安全地更新UI或UI可能依赖的任何数据进行绘图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29201736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档