JPanel工作,JButton没有

时间:2017-04-12 04:40:31

标签: java swing jpanel jbutton

我正在使用递归来创建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程序适用于每个部分?谁知道为什么?

0 个答案:

没有答案