【问题标题】:Why isn't my string being displayed in the window?为什么我的字符串没有显示在窗口中?
【发布时间】:2013-06-21 02:02:23
【问题描述】:

我正在尝试创建一个简单的应用程序,该应用程序显示一个红色圆圈,单击该圆圈时会在其下方显示不同的消息。我相信这部分代码:

g.drawString("DO NOT PRESS", 100, 100);

编码正确,但打开的窗口上没有显示任何文本。以下是目前的完整代码:

import java.awt.Graphics;

import javax.swing.JFrame;

public class BigRedButton extends JFrame {

    public BigRedButton() {

        setTitle("Big Red Button");
        setSize(500, 500);
        setResizable(false);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

    public void graphics(Graphics g) {

        g.drawString("DO NOT PRESS", 100, 100);
}
    public static void main(String[] args){

        new BigRedButton();
    }
}

【问题讨论】:

  • 1) 将@Override 符号添加到应该改变行为的方法中,以检查签名是否正确。 2)不要设置顶级容器的大小。而是布局内容并致电pack()

标签: java string swing window jframe


【解决方案1】:
  1. graphics 中没有 JFrame 这样的方法,所以没有调用它。
  2. 您应该避免直接在顶层容器上绘制,除此之外,它们不是双缓冲的,并且在绘制时会闪烁。相反,您应该创建一个自定义组件(从 JPanel 之类的东西扩展)并覆盖它的 paintComponent 方法。
  3. 您应该花时间阅读Performing Custom PaintingPainting in AWT and Swing2D Graphics

另外,在阅读过程中,您应该阅读Initial Threads

修正

正如 Andrew 所指出的,您应该使用 @Override 注释来确保您认为要覆盖的方法实际上是首先被覆盖的方法。这将阻止程序被编译,并节省大量试图弄清楚为什么事情没有按照您期望的方式工作的时间。

【讨论】:

  • 还将@Override 符号添加到应该改变行为的方法中,以检查签名是否正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多