Graphics

import java.awt.*;
import javax.swing.*;
import javax.swing.border.LineBorder;

public class TestFigurePanel extends JFrame {
    public TestFigurePanel () {
        setLayout(new GridLayout(2, 3, 5, 5));
        add(new FigurePanel(FigurePanel.LINE));
        add(new FigurePanel(FigurePanel.RECTANGLE));
        add(new FigurePanel(FigurePanel.ROUND_RECTANGLE));
        add(new FigurePanel(FigurePanel.OVAL));
        add(new FigurePanel(FigurePanel.RECTANGLE, true));
        add(new FigurePanel(FigurePanel.ROUND_RECTANGLE, true));
    }
    
    public static void main(String[] args) {
        TestFigurePanel frame = new TestFigurePanel();
        frame.setTitle("TestFigurePanel");
        frame.setSize(400, 200);
        frame.setLocationRelativeTo(null); //Center the frame
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

class FigurePanel extends JPanel {
    // Define the 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 = false;
    
    /** 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 */
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        
        int width = getWidth();
        int height = getHeight();
        
        switch(type) {
        case LINE: // Display two cross lines
            setBorder(new LineBorder(Color.BLACK));
            g.setColor(Color.BLACK);
            g.drawLine((int)(0.1 * width), (int)(0.1 * height), (int)(0.9 * width), (int)(0.9 * height));
            g.drawLine((int)(0.1 * width), (int)(0.9 * height), (int)(0.9 * width), (int)(0.1 * height));
            break;
            
        case RECTANGLE: // Display a rectangle
            setBorder(new LineBorder(Color.BLUE));
            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
            setBorder(new LineBorder(Color.RED));
            g.setColor(Color.RED);
            if(filled)
                g.fillRoundRect((int)(0.1 * width), (int)(0.1 * height) , (int)(0.8 * width), (int)(0.8 *height),
                        (int)(0.2 * width), (int)(0.2 * height));
            else
                g.drawRoundRect((int)(0.1 * width), (int)(0.1 * height) , (int)(0.8 * width), (int)(0.8 *height),
                        (int)(0.2 * width), (int)(0.2 * height));
            break;
            
        case OVAL: // Display an oval
            setBorder(new LineBorder(Color.BLACK));
            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));
        }
    }
    
    /** Return figure type */
    public int getType() {
        return type;
    }
    
    /** Set a new figure type */
    public void setType(int type) {
        this.type = type;
        repaint();
    }
    
    /** Check if the figure is filled */
    public boolean isFilled() {
        return filled;
    }
    
    /** Set a new filled property */
    public void setFilled(boolean filled) {
        this.filled = filled;
        repaint();
    }
    
    /** Specify preferred size */
    public Dimension getPreferredSize() {
        return new Dimension(80, 80);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值