好吧所以我自己练习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);
}
}
我无法在任何地方找到这个问题的答案,所以我想我会在这里问。我希望有人能帮帮忙。 每个提示都很受欢迎!提前谢谢。
真诚地,双重。
答案 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组件的位置和大小。