我創建了一個類是bosex顯示,並且它讀取您單擊的位置,並且該處理程序根據您單擊的位置更改背景色,除了更新JFrame外,一切工作正常。我嘗試了3種不同的代碼,如處理程序所示。 代碼:JFrame不更新與背景更改
public class Dynamic_Bg_Color extends JFrame{
private static final long serialVersionUID = 1L;
JFrame frame;
Handler handler = new Handler();
static Dimension size = new Dimension(500,400);
public Dynamic_Bg_Color(){
frame = new JFrame("BG Color Changer");
frame = this;
setBackground(Color.cyan);
frame.addMouseListener(handler);
}
public void paint(Graphics g1){
System.out.println("Click");
Graphics g = (Graphics)g1;
g.setColor(Color.blue);
g.fillRect(20,20,frame.getWidth()-40,100);
g.setColor(Color.green);
g.fillRect(20,140,frame.getWidth()-40,100);
g.setColor(Color.orange);
g.fillRect(20,260,frame.getWidth()-40,100);
}
public static void main(String[] args){
Dynamic_Bg_Color d = new Dynamic_Bg_Color();
d.frame.setPreferredSize(new Dimension(size));
d.frame.setMinimumSize(new Dimension(size));
d.frame.setMaximumSize(new Dimension(size));
d.frame.setLocationRelativeTo(null);
d.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
d.frame.setLayout(new FlowLayout());
d.frame.setVisible(true);
}
public class Handler implements MouseListener{
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();
if(x>= 20 && x<=frame.getWidth()-40 && y>=20 && y<= 120){
setBackground(Color.blue);
}
if(x>= 20 && x<=frame.getWidth()-40 && y>=140 && y<= 240){
getContentPane().setBackground(Color.green);
}
if(x>= 20 && x<=frame.getWidth()-40 && y>=260 && y<= 360){
frame.getContentPane().setBackground(Color.orange);
}
repaint();
}
//Implemented Methods, cut to shorten, no code in them//
}
}
我不明白你爲什麼只從'JFrame'擴展到他們忽略它並創建第二幀,然後想知道爲什麼它不會畫 – MadProgrammer