改程序代码(画图的)

habaxl 2001-09-14 04:22:18
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和所画图片大小决定每行的图片个数的构造器,并实现与以上代码运行一样的效果
...全文
86 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
frenzieddragon 2001-09-14
  • 打赏
  • 举报
回复
gz是关注的汉语首字母
jt80 2001-09-14
  • 打赏
  • 举报
回复
gz
habaxl 2001-09-14
  • 打赏
  • 举报
回复
gz??what's meaning!
我也是新手,你要是会就帮帮忙忙
hexiaofeng 2001-09-14
  • 打赏
  • 举报
回复
gz

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧