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

Java 为什么5个绘制元素中有4个没有显示在我的JFrame中?,java,graphics,drawing,Java,Graphics,Drawing,好的,我自己在练习Java,我发现了这个练习:只使用线条和椭圆画单词:“HELLO”。所以我基本上画了所有的字母,它应该可以完美地工作,但出于某种原因,只有“O”(最后一个字母)显示出来,我不知道为什么。这是我的密码: 主要类别: public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(1000, 750); frame.setTitle("HELLO withou

好的,我自己在练习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);




}

}
我在任何地方都找不到这个问题的答案,所以我想在这里问一下。我希望有人能帮我。 谢谢你给我的每一个提示!提前谢谢


诚恳地说,双。

像其他swing东西一样的框架应该在EDT-Thread()中初始化。从main方法初始化应该如下所示:

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new NewJFrame().setVisible(true);
        }
    });
}
如果所有这些都是从其他线程(主线程)完成的,那么将会发生非常奇怪的事情:没有绘制或部分绘制的内容,没有更新组件


尽管如此,组件的大小也可能有问题。请尝试在框架内安装LayoutManager,或初始化字母组件的位置和大小。

可能的副本。或者,您可能需要执行类似于
frame.setLayout(new GridLayout(1,))
的操作。