首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用AWT在帧上不一致地显示graphics.drawString

使用AWT在帧上不一致地显示graphics.drawString
EN

Stack Overflow用户
提问于 2015-08-29 19:19:57
回答 1查看 305关注 0票数 0

我正在编写一个不错的小实用程序,一切都进行得很顺利,但后来我尝试添加一些标签。他们出现了。然后我让它们变长了然后它们消失了。我尝试过许多实验(重新定位、更改字体、更改顺序),但除了较长的字符串之外,没有什么是一致的。考虑到我使用Swing不正确,我试图通过回到AWT来简化,但是我看到了几乎相同的问题。我甚至已经使用jdb完成了代码,而且,有时g.drawString工作在较长的字符串上,而其他时候则不工作。我试着发现任何错误,但也没有看到任何错误。

显然,我错过了一些最基本的东西。有人能解释: 1)为什么较短的字符串(例如“标签”)似乎总是工作? 2)为什么更长的字符串有时根本不显示? 3)是因为刺痛没有呈现失败,还是被其他图像覆盖? 4)如果#3被“覆盖”,如何控制其他(未知)图像的顺序?

我把密码删掉了。我正在用javac 1.7.0_79编译

代码语言:javascript
运行
复制
import java.awt.*;

public class GraphicsQuestion extends Frame {
   public GraphicsQuestion()
   {
       super("Question");  //call to Frame
       setFocusable(true);
   }
   public void DrawLabels(Graphics g)
   {
       g.setFont(new Font("Courier", Font.PLAIN, 16));
       g.setColor(Color.BLACK);

       g.drawString("label", 0, 100);
       String ss = new String("label1234567890123456789");
       g.drawString(ss, 100, 150);

       g.drawString("label12345", 100, 170); //does not print
       g.drawString("label1", 10, 170);

   }
   public void paint(Graphics g)
   {
      super.paint(g);
      DrawLabels(g);
   }
   public static void main(String args[]) {
      GraphicsQuestion gq = new GraphicsQuestion();
      gq.setBackground(Color.WHITE);
      gq.setSize(800, 200);
      gq.setVisible(true);
   }
}

正如代码中的注释所示,输出缺少一个标签。有时,它丢失了两个较长的标签。如果我在第一次执行时将"label12345“的打印注释掉,我就忽略了"label1234567890123456789”标签。如果我使"label12345“字符串变短,就像"label123”,那么所有东西都是打印的

在我的编程中,我习惯了一贯的行为。如果我很难理解这个简单的例子是怎么回事,我会犹豫是否要构建更复杂的东西。有人能解释这种不一致的行为吗?

*上述原始问题,以下是根据收到的答复:

感谢VGR的快速反应。我一直试图不把Swing和AWT混为一谈,但我尝试了代码。它似乎改善了一切。不幸的是,我已经将它提升到了下一个级别,并添加了KeyListener功能,并且再次看到了不稳定性。

现在,我想知道,我是否有比Java错误更深入的东西。也许我有一些硬件或图形驱动程序故障,因为字体可能会被扭曲。我可以编译代码,它将丢失20次中的20次标签,然后以相同的方式重新编译,并得到这个扭曲的输出。

http://www.screencast.com/t/rsBjRZlXlWu

我将在下面包含我的新代码,但这看起来越来越不像Java编程问题,而更像是环境问题。我正在戴尔E7450上运行Ubuntu14.04.3LTS

代码语言:javascript
运行
复制
import java.awt.*;
import java.awt.event.*;
import javax.swing.SwingUtilities;

class GraphicsAnswer extends Frame implements KeyListener {
   public GraphicsAnswer()
   {
       super("Question2");  //call to Frame
       addKeyListener(this);
       setFocusable(true);
   }
   public void DrawLabels(Graphics g)
   {
       g.setFont(new Font("Courier", Font.PLAIN, 16));
       g.setColor(Color.BLACK);

       g.drawString("label", 0, 100);
       String ss = new String("label1234567890123456789");
       g.drawString(ss, 100, 150);            //sometimes distorted

       g.drawString("label123456", 100, 170); //sometimes distorted
       g.drawString("label1", 10, 170);

   }
   public void paint(Graphics g)
   {
      super.paint(g);
      DrawLabels(g);
   }
   public void keyPressed(KeyEvent e)
   {
      int keyCode = e.getKeyCode();
      if (e.getKeyChar() == 'X')
         System.exit(0);
      else
         update(e.getKeyChar());
   }
   public void keyReleased(KeyEvent e)
   {
   }
   public void keyTyped(KeyEvent e)
   {
   }
   public void update( char c)
   {
      Graphics g = this.getGraphics();
      g.drawString("done", 10, 10);
   }
}

public class QMain2 implements Runnable {
    public void run() {
       // Invoked on the event dispatching thread
       // Construct and show GUI
       GraphicsAnswer ga = new GraphicsAnswer();
       ga.setBackground(Color.WHITE);
       ga.setSize(800, 200);
       ga.setVisible(true);
    }
    public static void main(String [] args) {
       SwingUtilities.invokeLater(new QMain2());
    }
}

有人知道Java的字体驱动测试套件,这样我就可以测试我的环境了吗?

EN

回答 1

Stack Overflow用户

发布于 2015-08-29 20:11:18

我输入、测试和编译了上面的代码,没有做任何修改,而且所有的东西看起来都是没有缺陷的。所有四个字符串都显示了我在上面所做的20/20测试运行。

您提到您“剥离”了您发布的这个问题的代码,所以问题可能在于项目的其余部分,或者仅仅是您端的图形错误。

以下是我对所有20个测试编译的结果的屏幕截图。祝你好运!

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

https://stackoverflow.com/questions/32289864

复制
相关文章

相似问题

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