wbr2005 2010-05-05 18:24
浏览 824
已采纳

java 画矩形

请问一下如何能在java中根据给定的坐标,长宽,画出矩形,这个矩形是由*号或其他符号拼成的。如下面的格式


  • *
  • *
  • *
  • * * * * * * * * * * * *

我用先拼成字符串形式,然后调用drawString()方法,只能打印出一行,无法识别出换行。不知道该用什么方法解决?
[code="java"]
package assignment.task1;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Window {
private int numberOfRows;
private int numberOfColumns;
private char borderCharacter;

Frame f = new Frame("Drawing");


Window(int numberOfRows,int numberOfColumns,char borderCharacter){
    this.numberOfRows=numberOfRows;
    this.numberOfColumns=numberOfColumns;
    this.borderCharacter=borderCharacter;
}

public void addShape(Object obj) {

}

public void removeShape(){

}

public void display(){
    MyCanvas p = new MyCanvas();
    WL wl = new WL();
    String str = drawWin().toString();
    p.getWin(str);

    System.out.println(str);

    f.add(p);
    f.setSize(600,400);
    f.setVisible(true); 

    f.addWindowListener(wl);
}

public StringBuffer drawWin(){
    StringBuffer str=new StringBuffer();
    int m =numberOfRows;
    int n =numberOfColumns;

      for(int i=0;i<=m;i++){
            for(int j=0;j<=n;j++){
                    if(i==0){
                        str.append(borderCharacter+" ");
                    }else if(i>0 && i<m){
                                if(j==0 || j==n){
                                    str.append(borderCharacter+" ");
                                }else{
                                    str.append("  ");
                                }
                    }else if(i==m){
                        str.append(borderCharacter+" ");
                    }                       

            }
            str.append("\n");
        }

    return str;
}

class WL extends WindowAdapter{
    public void windowClosing(WindowEvent e){
        f.setVisible(false);
    }

}

}

class MyCanvas extends Canvas{
String win;

public void getWin(String str){
    this.win = str;
}

public void paint(Graphics g){

    String s = win;
    g.drawString(s,10,20);


}   

}
[/code]

  • 写回答

2条回答 默认 最新

  • g_johnson_lee 2010-05-10 09:39
    关注

    [code="java"]
    package org.zergle.test.swing;

    import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.util.Arrays;

    import javax.swing.JFrame;
    import javax.swing.JPanel;

    /**

    • 星号组成的矩形
    • @author Johnson Lee
    • */
      public class StarRectangle {
      private Point location;
      private int width;
      private int height;

      public StarRectangle(Point location, int width, int height) {
      this.location = location;
      this.width = width;
      this.height = height;
      }

      /**

      • 绘制自己
      • @param g
        /
        public void draw(Graphics g) {
        char[] top = new char[width];
        char[] mid = new char[width];
        Arrays.fill(top, '
        ');
        Arrays.fill(mid, ' ');
        mid[0] = '*';
        mid[mid.length - 1] = '*';

        Font font = g.getFont();
        // 设置字体为等宽字体
        g.setFont(new Font("Courier New", Font.PLAIN, 10));
        FontMetrics fm = g.getFontMetrics();
        int x = location.x;
        int y = location.y;
        int h = fm.getHeight();

        g.drawChars(top, 0, top.length, x, y);
        if (this.height >= 2) {
        y += h;
        for (int i = 0; i < this.height - 2; i++) {
        g.drawChars(mid, 0, mid.length, x, y);
        y += h;
        }
        g.drawChars(top, 0, top.length, x, y);
        }
        g.setFont(font);
        }

      /**

      • @param args */ public static void main(String[] args) { new Canvas(); }

    }

    /**

    • 画布
    • @author Johnson Lee
    • */
      class Canvas extends JFrame {

      public Canvas() {
      this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
      this.setContentPane(new JPanel() {

          public void paint(Graphics g) {
              new StarRectangle(new Point(130, 100), 50, 5).draw(g);
          }
      
      });
      this.setSize(600, 400);
      this.setVisible(true);
      

      }
      }
      [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)