改程序代码(画图的)
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
public class Status extends JPanel{
final static int maxCharHeight = 6;
final static int minFontSize = 6;
int maxinrow = 10;//一行中的最大数量
final static Color bg = Color.white;
final static Color fg = Color.black;
final static Color red = Color.red;
final static Color green = Color.green;
final static BasicStroke stroke = new BasicStroke(1.0f);
Dimension totalSize;
FontMetrics fontMetrics;
public Status(){
try{
setBackground(bg);
setForeground(fg);
setLayout(new BorderLayout());
}catch(Exception ex) {ex.printStackTrace();}
}
FontMetrics pickFont(Graphics2D g2,
String longString,
int xSpace) {
boolean fontFits = false;
Font font = g2.getFont();
FontMetrics fontMetrics = g2.getFontMetrics();
int size = font.getSize();
String name = font.getName();
int style = font.getStyle();
while ( !fontFits ) {
if ( (fontMetrics.getHeight() <= maxCharHeight)
&& (fontMetrics.stringWidth(longString) <= xSpace) ) {
fontFits = true;
}
else {
if ( size <= minFontSize ) {
fontFits = true;
}
else {
g2.setFont(font = new Font(name,
style,
--size));
fontMetrics = g2.getFontMetrics();
}
}
}
return fontMetrics;
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setXORMode(this.getBackground());
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Dimension d = getSize();
int gridWidth = d.width / 10;
int gridHeight = d.height / 3;
fontMetrics = pickFont(g2, "right or not right!",
gridWidth);
Color fg3D = Color.lightGray;
g2.setPaint(fg3D);
g2.draw3DRect(0, 0, d.width - 1, d.height - 1, true);
g2.draw3DRect(2, 2, d.width - 4, d.height - 4, false);
g2.setPaint(fg);
int x = 6;//X向隔间为2x
int y = 10;
int rectWidth = gridWidth - 2*x;//定义长度
int stringY = gridHeight - 3 - fontMetrics.getDescent();//折线高度
int rectHeight = stringY - fontMetrics.getMaxAscent() - y - 2;//定义高度
//画折线-----------
g2.setStroke(stroke);
int x4Points[]={x-3,x+d.width-10,x+d.width-10,x-3,x-3,x+d.width-10,x+d.width-10,x-3};
int y4Points[] = {y-5, y-5,y-5+stringY,y-5+stringY,y-5+2*stringY,y-5+2*stringY,y-5+3*stringY,y-5+3*stringY};
GeneralPath polyline = new GeneralPath(GeneralPath.WIND_EVEN_ODD,
x4Points.length);
polyline.moveTo (x4Points[0], y4Points[0]);
for ( int index = 1; index < x4Points.length; index++ ) {
polyline.lineTo(x4Points[index], y4Points[index]);
};
g2.draw(polyline);
for(int i=0;i<maxinrow;i++)
{ //画小竖线
g2.setStroke(stroke);
g2.draw(new Line2D.Double(x+rectWidth/2+i*gridWidth, y, x+rectWidth/2+i*gridWidth, y-5));
g2.draw(new Line2D.Double(x+rectWidth/2+i*gridWidth,y+stringY,x+rectWidth/2+i*gridWidth,y-5+stringY));
g2.setPaint(red);
g2.fill(new Rectangle2D.Double(x+i*gridWidth, y, rectWidth, rectHeight));
g2.setPaint(fg);
g2.drawString("not right", x+i*gridWidth, stringY);
g2.setPaint(green);
g2.fill(new Rectangle2D.Double(x+i*gridWidth, y+stringY, rectWidth, rectHeight));
g2.setPaint(fg);
g2.drawString("right", x+i*gridWidth, stringY*2);
//currentindex++;
}
}
public static void main(String s[]) {
JFrame f = new JFrame("ShapesDemo2D");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});
JPanel panel1=new Status();
f.getContentPane().add("Center", panel1);
f.pack();
f.setSize(new Dimension(380,150));
f.show();
}
}
怎么将以上的代码改为一个受JPanel和所画图片大小决定每行的图片个数的构造器,并实现与以上代码运行一样的效果