簡體   English   中英

Java Swing-Repaint()無法正常工作

[英]Java Swing - Repaint() not working

以下是我的代碼。 即使正在調用動作偵聽器功能,GUI也不會在鼠標單擊事件上清除自身-

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();
}
}

兩個GUI_new實例存在GUI_new 更換:

f.setContentPane(new GUI_new()); 

與:

f.setContentPane(this);

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

請注意,使用絕對布局可能很復雜,通常可以避免。 有關一些想法,請參見《布局管理器視覺指南》

另外,不要重寫paintComponent()而不是paint() 請參閱執行自定義繪畫

嘗試這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM