JAVA 交叉的画出n行*m列的表格

package Rong;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;


public class Table extends JFrame {
  ControlPanel control;
  MyClassCanvas canvas;

  public Table() {
  setLayout(new BorderLayout());
  canvas = new MyClassCanvas();
  control = new ControlPanel(canvas);// 将canvas 作为参数,就可以向它传递参数

  add("South", control);// add control
  add("Center", canvas);// add canvas

  // 设置窗体的属性
  this.setTitle("产生N行*M列的表格");
  this.setBounds(500, 100, 500, 500);
  this.setVisible(true);
  this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
  }

  public static void main(String[] args) {
  new Table();
  }

}

class ControlPanel extends JPanel implements ActionListener {
  // 定义字段
  JLabel xLabel = new JLabel("列数=");
  JTextField startField = new JTextField("10", 8);

  JLabel yLabel = new JLabel("行数=");
  JTextField endField = new JTextField("10", 8);

  JButton button = new JButton("生成");

  // 添加canvas,可以通过构造函数获得引用,以便单击时能够传递参数
  MyClassCanvas canvas;

  public ControlPanel(MyClassCanvas canvas2) {
  this.canvas = canvas2;
  add(xLabel);
  add(startField);
  add(yLabel);
  add(endField);
  add(button);
  button.addActionListener(this);
  }

  public void actionPerformed(ActionEvent e) {
  int x = Integer.parseInt(startField.getText());
  int y = Integer.parseInt(endField.getText());
  canvas.redraw(x, y);
  }
}

class MyClassCanvas extends Canvas {
  private int xNum = 10;// 列数
  private int yNum = 8;// 行数
  private int xInterval;// x轴上单元格的间隔
  private int yInterval;// y轴上单元格的间隔

  public void paint(Graphics g) {

  Rectangle r = getBounds();// 获得Canvas的大小,以便能后在窗体调整大小后自动计算单元格的大小
  xInterval = r.width / xNum;// 获得x轴上的宽度
  yInterval = r.height / yNum;// 获得y轴上的宽度
  g.setColor(new Color(200, 0, 0));
  for (int i = 0; i <= xNum; i++) {// draw x axis
    g.drawLine(i * xInterval, 0, i * xInterval, r.height);
  }
  for (int i = 0; i <= yNum; i++) {// draw y axis
    g.drawLine(0, i * yInterval, r.width, i * yInterval);
  }
  }

  public void redraw(int x, int y) {
  this.xNum = x;
  this.yNum = y;
  repaint();
  }
} JAVA <wbr>交叉的画出n行*m列的表格

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值