2013-11-04 57 views
0

以下是我的代碼。 GUI是不清除本身即使動作監聽功能正在called-Java Swing - 重繪()不起作用

package GUI; 
import java.awt.Color; 
import java.awt.Event; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseListener; 
import javax.swing.*; 
import ospackage.tablefunctions; 

public class GUI_new extends JPanel implements ActionListener{ 

Graphics g1; 
JButton buttonNext = new JButton(); 
int L=0; 

public void display() { 
    final JFrame f=new JFrame("Rectangle");  
    f.setContentPane(new GUI_new()); 
    f.setSize(1000,1000); 
    f.setVisible(true); 
    f.getContentPane().setBackground(Color.BLACK); 

    f.setLayout(null); 
    f.add(buttonNext); 

    buttonNext.setBounds(900,30, 200, 200); 
    buttonNext.setVisible(true); 

    buttonNext.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      // TODO Auto-generated method stub 
      //printBlocks(g, 100); 
      //buttonNext.revalidate(); 
      removeAll(); 
      revalidate(); 
      //f.repaint(); 
      //System.out.println("called repaint"); 
      repaint(); 

      System.out.println("called"); 
     } 
    }); 

} 

tablefunctions io = new tablefunctions(); 

public void paint(final Graphics g) { 
    super.paint(g); 
    printBlocks(g, 0); 
} 

public void printBlocks(Graphics g , int offset) { 
    int i=0,j=0,l=offset; 

    for(i=20;i<620;i=i+60) { 
     for(j=20;j<820;j=j+80) { 
      String temp=Integer.toString(l); 
       if(!io.retrieveData("FAT","address" , 2, temp).equals("free")) 
        g.setColor(Color.RED); 
       else 
        g.setColor(Color.GREEN); 

      g.drawRect(j, i, 60, 30); 
      g.fillRect(j, i, 60, 30); 
      g.drawString("Cluster" + l,j , i-5); 

      l++; 
    } 
} 
} 

@Override 
public void actionPerformed(ActionEvent e) { 
    // TODO Auto-generated method stub 
// e.getSource().equals() 

} 

public static void main(String[] args) { 
    GUI_new gn = new GUI_new(); 
    gn.display(); 
} 
} 
+0

你試圖重繪? – alex2410

回答

3

鼠標點擊事件試試這個:

GUI_new.this.removeAll(); 
GUI_new.this.updateUI(); 
4

有與GUI_new兩個實例的問題。替換:

f.setContentPane(new GUI_new()); 

有:

f.setContentPane(this); 

的問題是,actionPerformed重繪this實例,但JFrame內容與第二個實例初始化。

請注意,使用absolute layout可能很複雜,通常可以避免。有些想法參見A Visual Guide to Layout Managers

此外,請覆蓋paintComponent()而不是paint()。見Performing Custom Painting