2014-12-04 65 views
0

我想開發一個Java Applet,它顯示Sorting的可視化。所以我寫了這樣的代碼......在Java Applet中重寫結果

public class SortNumbersGUI extends JApplet { 
    private static final long serialVersionUID = 1L; 
    List<Integer> randomList; 
    JLabel numberLabel; 
    JButton sortButton; 

    @Override 
    public void init() { 
     randomList = MyRandom.myRandom(); 
     setSize(400, 400); 
     setLayout(new FlowLayout()); 
     sortButton = new JButton("Sort"); 
     sortButton.setBounds(50, 0, 50, 10); 
     sortButton.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       Collections.sort(randomList); 
       removeAll(); 
       repaint(); 
      } 
     }); 
     this.add(sortButton); 
     super.init(); 
    } 


    @Override 
    public void paint(Graphics g) { 
     int y = 20; 

     for (Integer i : randomList) { 
      g.drawString(i.toString(), 0, y + 10); 
      g.fillRect(20, y, (i * 10)/10, 5); 
      y = y + 20; 
     } 
    } 
} 

但是,我在這裏面臨兩個問題..

  1. 排序按鈕,這是一個JButton並不總是可見。當我將鼠標光標放在該排序按鈕的位置上時,只有它出現。

  2. 當我調用repaint()方法時,結果重寫。隨着波紋管圖像

Result Image(因爲我沒有名聲,我粘貼圖片鏈接。)

請幫我解決這個問題。 先謝謝您。

回答

0

你的問題是你重寫paint而不是paintComponent,並且你沒有調用super.paint/Component(這也是一個很好的做法,儘管這裏可能不是100%必需的)。

因爲你怎麼樣了重寫paint()方法,您鍵是沒有得到時自動JApplet的塗

+0

*「你overridding漆代替paintComponent「*與」JComponent「不同,像JFrame和JApplet這樣的頂級容器沒有'paintComponent(Graphics)'方法。 (其中一種原因是在'JPanel'中進行自定義繪畫更好,然後將面板添加到框架或小程序中。) – 2014-12-05 00:32:02

2
@Override 
public void paint(Graphics g) { 
    // .. 

應塗的:

@Override 
public void paint(Graphics g) { 
    super.paint(g); // paints **BG**, border etc. 
    // ..