package thinking;import java.awt.*;import javax.swing.*;public class My extends JFrame{public My(){setLayout(new GridLayout(2,3,5,5));add(new FigurePanel(FigurePanel.LINE));//FigurePanel是自己定义的类,调用FigurePanel中的构造方法add(new FigurePanel(FigurePanel.RECTANGLE));add(new FigurePanel(FigurePanel.ROUND_RECTANGLE));add(new FigurePanel(FigurePanel.OVAL,true));add(new FigurePanel(FigurePanel.RECTANGLE,true));add(new FigurePanel(FigurePanel.ROUND_RECTANGLE,true));}public static void main(String[] args){My frame = new My();frame.setTitle("xx");frame.setSize(600,300);frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);frame.setLocationRelativeTo(null);frame.setVisible(true);}} class FigurePanel extends JPanel { //构建FigurePanel类 // 定义常量 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; public FigurePanel()//无参构造方法 { } public FigurePanel(int type) { this.type = type; } public FigurePanel(int type, boolean filled) { this.type = type; this.filled = filled; } public void paintComponent(Graphics g) //方法 { super.paintComponents(g); int width = getWidth(); int height = getHeight(); System.out.println("width = " + width + " heigth = "+ height); System.out.println("width = " + ((int)width*0.1) + " heigth = "+ height); switch (type) //类型 { case LINE: //LINE类型时的行为 { g.setColor(Color.YELLOW); g.drawLine(10, 10, width - 10, height - 10); g.drawLine(width - 10, 10, 10, height - 10); break; } case RECTANGLE: //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: //圆角矩形 { g.setColor(Color.RED); if (filled) { g.fillRoundRect((int)(0.1*width), (int)(0.1 * height), (int)(0.8 *width), (int)(0.8*height), 40, 40); } else { g.drawRoundRect((int)(0.1*width), (int)(0.1 * height), (int)(0.8 *width), (int)(0.8*height), 40, 40); } break; } case 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)); } } } } public void setType(int type) { this.type = type; repaint();//repaint方法调用会引起paintComponent方法被调用。repaint方法被调用以刷新视图区域 } public int getType() { return type; } public void setFilled(boolean filled) { this.filled = filled; repaint();//repaint方法调用会引起paintComponent方法被调用。repaint方法被调用以刷新视图区域 } public boolean isFilled() { return filled; } public Dimension getPreferredSize() { return new Dimension(10, 10); } }
新闻热点
疑难解答