2014-11-21 65 views
0

我對如何擴展JPanel以使畫布樣式對象在Swing中工作有點困惑,如果我想要在創建新圖像之後創建新圖像或文本,我該怎麼辦?目的?因爲我認爲這是paintComponent被調用的時候。paintComponent之後的Java Swing繪製圖像調用

+0

http://www.google.com/url?url=http://docs.oracle.com/javase/tutorial/uiswing/painting&rct=j&frm=1&q=&esrc=s&sa=U&ei=gJZvVOPTLLT_sAS3tILADQ&ved=0CBQQFjAA&sig2=kL4owINmtAOLLmtO8tRCFQ&usg = AFQjCNHkv5ISFDgkyC7FVWGorMLf92vUUQ – ControlAltDel 2014-11-21 19:46:29

+0

我已經看過,沒有解釋如何在paintComponent運行後如何做一些事情 – Eykar 2014-11-21 22:08:49

+0

修改後調用repaint().. – 2014-11-21 23:17:06

回答

2

除了從ControlAltDel優秀的建議(見step 3 of the tutorial關於如何編程重繪信息)Andrew Thompson和,這可能是一個非常簡單的例子,用於幫助你開始:

public class Main { 
    public static void main(final String[] args) throws InterruptedException { 
     final JFrame frame = new JFrame("Swing canvas"); 
     frame.setBounds(100, 100, 640, 480); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     final CanvasPanel canvasPanel = new CanvasPanel(); 
     frame.getContentPane().add(canvasPanel); 
     frame.setVisible(true); 
     final List<String> words = Arrays.asList("one", "ein", "une", "uno", "jeden", "een"); 
     for (final String word : words) { 
      canvasPanel.addWord(word); 
      // Dirty way to simulate some heavy translation work... 
      Thread.sleep(246); 
     } 
    } 
} 

class CanvasPanel extends JPanel { 
    private final List<String> words = new ArrayList<>(); 

    public void addWord(final String word) { 
     words.add(word); 
     repaint(); 
    } 

    @Override 
    protected void paintComponent(final Graphics graphics) { 
     super.paintComponent(graphics); 
     for (int wordIndex = 0; wordIndex < words.size(); wordIndex++) 
      graphics.drawString(words.get(wordIndex), 42, 64 + 28 * wordIndex); 
    } 
} 

在這例如,畫布面板自身調用重繪方法,但也可以從外部調用。祝你的項目好運!

+0

那麼paintComponent是否重複運行?而不是一次?或者每當重新調用被調用? – Eykar 2014-11-22 06:54:53

+0

是的,只要系統確定有必要(例如當面板在被另一個窗口隱藏後暴露)或程序調用重繪時,就會重複調用它。請參閱[自定義繪畫教程摘要](https://docs.oracle.com/javase/tutorial/uiswing/painting/summary.html)以獲得更好的概述。 – 2014-11-22 11:49:38

+0

哦,我明白了,我現在明白了,謝謝,這是我困惑的地方:) – Eykar 2014-11-22 17:34:57