我正在使用递归来创建koch雪花分形,并且当我想用我的Jbutton更改面板上的分形顺序时,每个分形都有效吗
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KochSnowFlakes extends JApplet implements ActionListener {
private final int APPLET_WIDTH =400;
private final int APPLET_HEIGHT=440;
private final int MIN=1, MAX=9;
private JButton increase, decrease;
private JLabel titleLabel, orderLabel;
private KochPanel drawing;
private JPanel appletPanel, tools;
private int order1 =4;
public void init(){
tools = new JPanel();
tools.setLayout(new BoxLayout(tools, BoxLayout.X_AXIS));
tools.setBackground(Color.yellow);
tools.setOpaque(true);
titleLabel = new JLabel("The Koch Snowflake");
titleLabel.setForeground(Color.black);
increase = new JButton("up");
//increase.setPressedIcon(new ImageIcon("./src/upArrow.png"));
increase.setMargin(new Insets(0,0,0,0));
increase.addActionListener(this);
decrease = new JButton("down");
//decrease.setPressedIcon(new ImageIcon("./src/arrow-down.png"));
decrease.setMargin(new Insets(0,0,0,0));
decrease.addActionListener(this);
orderLabel = new JLabel("Order: "+order1);
orderLabel.setForeground(Color.black);
tools.add(titleLabel);
tools.add(Box.createHorizontalStrut(20));
tools.add(decrease);
tools.add(increase);
tools.add(Box.createHorizontalStrut(20));
tools.add(orderLabel);
drawing = new KochPanel(order1);
appletPanel = new JPanel();
appletPanel.add(tools);
appletPanel.add(drawing);
getContentPane().add(appletPanel);
setSize(APPLET_WIDTH,APPLET_HEIGHT);
}
public void actionPerformed(ActionEvent event){
int order = drawing.getOrder();
if(event.getSource()==increase){
order++;
}
else{
order--;
}
if(order>=MIN && order>=MAX){
orderLabel.setText("Order: "+order);
drawing.setOrder(order);
repaint();
}
}
}
KochPanel类
import java.awt.*;
import javax.swing.*;
public class KochPanel extends JPanel {
private final int PANEL_WIDTH =400;
private final int PANEL_HEIGHT =400;
private final double SQ = Math.sqrt(3.0)/6;
private final int TOPX =200, TOPY=20;
private final int LEFTX =60, LEFTY =300;
private final int RIGHTX =340, RIGHTY=300;
private int current;
public KochPanel(int currentOrder){
current = currentOrder;
setBackground(Color.black);
setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
}
public void drawFractal(int order, int x1, int y1, int x5, int y5, Graphics page){
int deltaX, deltaY, x2,x3,x4, y2,y3,y4;
if(order ==1){
page.drawLine(x1, y1, x5, y5);
}
else{
deltaX = x5-x1;
deltaY = y5-y1;
x2 = x1 + deltaX /3;
y2 = y1 + deltaY /3;
x3 = (int) ((x1+x5)/2 +SQ * (y1-y5));
y3 = (int) ((y1+y5)/2 +SQ * (x5-x1));
x4 = x1+deltaX * 2/3;
y4 = y1+deltaY * 2/3;
drawFractal(order-1, x1,y1,x2,y2,page);
drawFractal(order-1, x2,y2,x3,y3,page);
drawFractal(order-1, x3,y3,x4,y4,page);
drawFractal(order-1, x4,y4,x5,y5,page);
}
}
public void paintComponent(Graphics page){
super.paintComponent(page);
page.setColor(Color.green);
drawFractal(current, TOPX, TOPY, LEFTX, LEFTY, page);
drawFractal(current, LEFTX, LEFTY, RIGHTX, RIGHTY, page);
drawFractal(current, RIGHTX,RIGHTY, TOPX, TOPY, page);
}
public void setOrder(int order){
current = order;
}
public int getOrder(){
return current;
}
}
我正在尝试使用JBUttons的新方法。除了按钮之外,我的KochPanel程序适用于每个部分?谁知道为什么?