[英]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.