package UI;
import java.awt.*;
import javax.swing.JPanel;
public class FigurePanel extends JPanel {
// Define constants
public static final int LINE = 1;
public static final int RECTANGLE = 2;
public static final int ROUND_RECTANGLE = 3;
public static final int OVAL = 4;
private int type = 1;
private boolean filled;
/**
* Construct a default FigurePanel
*/
public FigurePanel() {
}
/**
* Construct a FigurePanel with the specified type
*/
public FigurePanel(int type) {
this.type = type;
}
/**
* Construct a FigurePanel with the specified type and filled
*/
public FigurePanel(int type, boolean filled) {
this.type = type;
this.filled = filled;
}
/**
* Draw a figure on the panel
*/
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Get the appropriate size for the figure
int width = getSize().width;
int height = getSize().height;
switch (type) {
case LINE: // Display two cross lines
g.setColor(Color.BLACK);
g.drawLine(10, 10, width - 10, height - 10);
g.drawLine(width - 10, 10, 10, height - 10);
break;
case RECTANGLE: // Display a rectangle
g.setColor(Color.BLUE);
if (filled) {
g.fillRect((int) (0.1 * width), (int) (0.1 * height),
(int) (0.8 * width), (int) (0.8 * height));
} else {
g.drawRect((int) (0.1 * width), (int) (0.1 * height),
(int) (0.8 * width), (int) (0.8 * height));
}
break;
case ROUND_RECTANGLE: // Display a round-cornered rectangle
g.setColor(Color.RED);
if (filled) {
g.fillRoundRect((int) (0.1 * width), (int) (0.1 * height),
(int) (0.8 * width), (int) (0.8 * height), 20, 20);
} else {
g.drawRoundRect((int) (0.1 * width), (int) (0.1 * height),
(int) (0.8 * width), (int) (0.8 * height), 20, 20);
}
break;
case OVAL: // Display an oval
g.setColor(Color.BLACK);
if (filled) {
g.fillOval((int) (0.1 * width), (int) (0.1 * height),
(int) (0.8 * width), (int) (0.8 * height));
} else {
g.drawOval((int) (0.1 * width), (int) (0.1 * height),
(int) (0.8 * width), (int) (0.8 * height));
}
}
}
/**
* Set a new figure type
*/
public void setType(int type) {
this.type = type;
repaint();
}
/**
* Return figure type
*/
public int getType() {
return type;
}
/**
* Set a new filled property
*/
public void setFilled(boolean filled) {
this.filled = filled;
repaint();
}
/**
* Check if the figure is filled
*/
public boolean isFilled() {
return filled;
}
/**
* Specify preferred size
*/
public Dimension getPreferredSize() {
return new Dimension(80, 80);
}
}
原文地址:http://www.cse.ust.hk/~liao/comp201/slides/html/FigurePanel.html
应用例子见《java语言程序设计-基础篇(原书第8版)》406~409页