【发布时间】:2014-04-16 13:02:01
【问题描述】:
我的问题有点难以表达,但基本上这就是我想要做的:我有一个家庭作业来绘制一个递归树,用户可以选择显示的节点数量。我有一个使用递归绘制树的绘制方法,我需要程序接受来自文本字段的用户输入。我是递归新手,但我和室友设法使用 Graphics2D 绘制了一些东西,但我们无法开始弄清楚如何允许用户选择节点数量。输入字段的骨架在那里,但它没有做任何事情,因为我没有 ActionListener 并且不完全知道将什么放入 ActionListener 以允许用户输入值。任何帮助将不胜感激。谢谢!
import java.awt.*;
import javax.swing.*;
public class Tree extends JPanel {
private static final long serialVersionUID = 1L;
private JLabel num; //tells user to enter number of nodes
private JTextField in; //text field for user input
public Tree() {
num = new JLabel("Number of Branches: ");
add(num);
in = new JTextField(5);
add(in);
}
private void draw(Graphics2D g, int n, int x, int y) {
if (n == 0) {
return;
} else {
int angle = 45;
int length = 50;
g.drawLine(x, y, x, y - length); // trunk
g.setColor(Color.BLACK);
g.rotate(Math.toRadians(-angle), x, y - length); // left
// branch
draw(g, n - 1, x, y - length);
g.rotate(Math.toRadians(angle), x, y - length);
g.rotate(Math.toRadians(angle), x, y - length); // right
// branch
draw(g, n - 1, x, y - length);
g.rotate(Math.toRadians(-angle), x, y - length);
}
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D gg = (Graphics2D) g;
draw(gg, 3, getWidth() / 2, getHeight() / 2);
}
public static void main(String[] args) {
Tree tree = new Tree();
tree.setPreferredSize(new Dimension(500, 500));
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(tree);
frame.setSize(500, 500);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
【问题讨论】:
标签: java swing recursion tree draw