2014-02-15 80 views
-1

如果有人可以解釋如何得到這個畫和爲什麼它不是畫很棒!線程不想工作

public class Main extends JPanel implements Runnable { 

    public void run() { 

     System.out.println("g"); 
     repaint(); 
    } 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawRect(50, 50, 200, 200); 
    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame("Physics!"); 
     frame.setSize(500, 500); 
     frame.setBackground(Color.BLUE); 
     frame.setVisible(true); 

     Main physics = new Main(); 
     Thread t = new Thread(physics); 
     t.start(); 
    } 

} 
+0

它有自己的想法。 –

回答

1

你從不添加physicsJFrame

Main physics = new Main(); 
JFrame frame = new JFrame("Physics!"); 
frame.add(physics); 

旁註

  • JPanel覆蓋getPreferredSize()畫這樣的面板上有一個首選的大小,那麼你可以pack()框架,爲你應該做,而不是設置它的大小

    @Override 
    public Dimension getPreferredSize() { 
        return new Dimension(500, 500); 
    } 
    ... 
    frame.pack(); 
    // frame.setSize(500, 500); 
    
  • 此外,paintComponentprotectedpublic

  • 另見Initial Threads有關事件指派線程運行的Swing應用程序

+0

謝謝!我假設這是我失蹤的一件小事 – ImGone98

+0

當做維度的事情,它只是把小小的框架? – ImGone98

+0

你還需要'包裝()'你的框架,_before_你'setVisible()'和_after_你'添加(物理)'' –

-1

嘗試把t.join()在main方法t.start後()..你的主要方法應該等待線程來完成。

+0

沒有不行,沒有改變 – ImGone98

1

你必須JPanel中添加到JFrame:

JFrame frame = new JFrame("Physics!"); 
    Main physics = new Main(); 
    Thread t = new Thread(physics); 
    t.start(); 
    frame.setContentPane(physics); // Add it like this 
    frame.setSize(500, 500); 
    frame.setBackground(Color.BLUE); 
    frame.setVisible(true);