ButtonApp3 (other files are same as before): ButtonFill.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ButtonFill extends TextButton {
    private boolean buttonState = false; //*2 We remember current state, so can toggle it
    
    public ButtonFill (Square square) {
	super (square, null, "Filled"); //*1 Supply relevant args to superclasses
    }

    // We override this one
    public void actionPerformed (ActionEvent e) { //*3 We override callback
	buttonState = ! buttonState; //*2
	if (buttonState) square.doAction (Square.ButtonAction.FILL); //*3
	else square.doAction (Square.ButtonAction.EMPTY); //*3

	// Also update button label
	if (buttonState) setText ("Empty"); //*4 Also update button label
	else setText ("Filled"); //*4
    }
}
[download file]