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();
}
}
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Table extends JFrame {
}
class ControlPanel extends JPanel implements ActionListener {
}
class MyClassCanvas extends Canvas {
}