【问题标题】:What is the simplest way to display a graphics drawing in Java AWT?在 Java AWT 中显示图形的最简单方法是什么?
【发布时间】:2017-02-02 18:11:14
【问题描述】:

我想使用父类,最好是 Component(我知道的最高级别的 AWT gui 类)。我不是编程新手,但我是自学成才,在获取我的问题的示例代码时遇到问题。这是我的代码:

import java.awt.Frame;
public class DrawSquare extends Frame{
    public DrawSquare(){
        setBounds(0,0,100,100);
        setVisible(true);
    }
    public static void main(String[]args){
        new DrawSquare();
    }
}

基本上,我想对父类做同样的事情,以“可能”拥有更快、更高效的代码。我假设 Frame 具有更多内置选项,例如边框,而 Window(父类)没有,但我只能使用 Frame 制作这个简单的代码。

我想使用 AWT,而不是顺便说一句。

【问题讨论】:

  • 我不明白这个问题 - 但你没有开始的图形,它在哪里?
  • 这个程序通过扩展Frame在屏幕一角制作了一个100x100的正方形。扩展其他任何东西,它都不会显示。
  • 为什么要避免使用 Swing?当前的所有文档(如 this)都是针对 Swing 的,使用它不需要任何费用。

标签: java awt frame


【解决方案1】:

根据我的测试:

class C extends Component {
  public C() { setSize(200, 200); setVisible(true); }
  public void paint(Graphics g) {
    g.drawRect(0, 0, 100, 100);
  }
}

不会显示,因为它可能需要添加一些东西。

class C extends Container {
  public C() { setSize(200, 200); setVisible(true); }
  public void paint(Graphics g) {
    g.drawRect(0, 0, 100, 100);
  }
}

不会显示,因为它是一个容器,所以它需要添加其他东西。

class C2 extends Window {
  public C2() { super(new Frame()); setLocation(100, 100); setSize(200, 200); setVisible(true);  }
  public void paint(Graphics g) {
    g.drawRect(0, 0, 100, 100);
  }
}

可以显示,但没有什么可抓取的,它甚至不显示在任务栏上,所以除非你在某处添加它,否则它是无用的。

所以

class C extends Frame {
  public C() { setSize(200, 200); setVisible(true);  }
  public void paint(Graphics g) {
    g.drawRect(0, 0, 100, 100);
  }
}

是您的第一个既是组件又是容器的解决方案。

【讨论】:

  • 谢谢,这正是我想要的。我不知道如何让 Window 工作,因为我没有使用关键字 super,我一直在这样做:public C(Window owner){}。现在我可以选择窗口,但看起来同样复杂。我正在摆弄画布,但也无法显示。我已经想通了您指定的 Component 和 Container 不显示的原因。
  • 每一个被覆盖的paint方法都应该首先调用super方法。 “最简单”的方法并不总是可靠的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
相关资源
最近更新 更多