为什么我的JFrame中没有显示5个绘制元素中的4个?

时间:2017-03-15 10:37:42

标签: java graphics drawing

好吧所以我自己练习Java而且我找到了这个练习:画出单词:“HELLO”只使用线条和椭圆形。所以我基本上画了所有的字母,它应该完美,但由于某种原因只有“O”(最后一个字母)显示,我不知道为什么。这是我的代码:

主要课程:

public static void main(String[] args) {

   JFrame frame = new JFrame();
   frame.setSize(1000, 750);
   frame.setTitle("HELLO without using Strings");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setPreferredSize(new Dimension(1000, 1000));
   JComponent componentH = new LetterH();
   JComponent componentE = new LetterE();
   JComponent componentL1 = new LetterL1();
   JComponent componentL2 = new LetterL1();
   JComponent componentO = new LetterO();
   frame.add(componentH);
   frame.add(componentE);
   frame.add(componentL1);
   frame.add(componentL2);
   frame.add(componentO);      
   frame.setVisible(true);
}

一个字母(我也可以张贴其他字母,但没有意义,因为代码在每个字母上看起来完全相同,除了:x1,y1,x2,y2:

public class LetterH extends JComponent {

@Override
public void paintComponent(Graphics g) {
    g.setColor(Color.RED);
    g.drawLine(10, 0, 10, 100);
    g.drawLine(60, 0, 60, 100);
    g.drawLine(10, 50, 60, 50);


    g.setColor(Color.BLACK);
    g.drawLine(120, 0, 120, 100);
    g.drawLine(120, 100, 170, 100);

    g.setColor(Color.BLACK);
    g.drawLine(180, 0, 180, 100);
    g.drawLine(180, 100, 230, 100);




}

}

我无法在任何地方找到这个问题的答案,所以我想我会在这里问。我希望有人能帮帮忙。 每个提示都很受欢迎!提前谢谢。

真诚地,双重。

1 个答案:

答案 0 :(得分:0)

像其他摇摆物一样的帧应该在EDT - Thread(java.awt.EventQueue.invokeLater explained)内初始化。 main 方法的初始化应如下所示:

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new NewJFrame().setVisible(true);
        }
    });
}

如果所有这些东西都是从其他线程(主线程)完成的,那么就会发生很奇怪的事情:没有绘制或部分绘制内容,没有更新组件,......

尽管如此,组件的尺寸也可能存在问题。尝试在框架中安装LayoutManager或初始化Letter组件的位置和大小。