BJFU Java程序设计实验三——方阵可视化遍历

一、实验要求

  1. 掌握窗口、各种组件,包括按钮、输入框、标签等。
  2. 掌握事件触发和处理机制。
  3. 复用实验2中的类。
  4. 实验实现目标:对方阵的4种不同的遍历,实现可视化展现。

二、实验内容和步骤

1.实验背景介绍

(1)方阵的遍历方式几乎是无穷无尽的,但常见的遍历方式有行主序、列主序、对角序和反对角序等。

(2)对实验2所实现的4种遍历机制,用可视化的方式加以展现。

(3)通过按钮实现遍历的开始和下一步等操作。

2.用记事本书写一个Java程序

(1)、建立个人子目录

步骤1:建立个人子目录

第一次上机时先在D盘上建立一个以自己学号+姓名为目录名的子目录,如学号为210824109的张三同学,就用“210824109张三”为子目录名。实验完成的源代码、Java字节码和实验报告三个文件都要放在这个文件夹下(称为上交文件夹)。

步骤2:建立Java源代码文件

在所建立的文件夹下建立一个文件夹exp3,在这个文件夹下一个记事本文件visualization.txt,并把它重命名为Visualization.java

(2)、编写源代码

步骤1:创建一个公共类Visualization

要创建的公共类在默认包中,可引入其它的包。所创建的公共类在文件中的一行如下:

public class Visualization extends JFrame implements ActionListener {

步骤2:建立主方法main( )

在类Fraction的类体中编写主方法:

public static void main(String[] args){… …}

步骤3:编写方法和Visualization主方法main( )

里面会有一条语句即可:new Visualization();

3.调试和运行

package exp3;

import exp2.*;

import java.awt.event.ActionListener;

import javax.swing.*;

import javax.swing.border.Border;

import java.awt.event.*;

import java.awt.*;

public class Visualization extends JFrame implements ActionListener {

    public static final int MIN_SIZE = 3;

    public static final int MAX_SIZE = 13;

    public static final String[] TYPES = {"行主序", "列主序", "对角", "反对角"};

    private int whichType = 0;

    private SquareTraversal squareTraversal = null;

    JRadioButton radioRowMajor = new JRadioButton("行主序");

    JRadioButton radioColMajor = new JRadioButton("列主序");

    JRadioButton radioDiagonal = new JRadioButton("对角序");

    JRadioButton radioAntiDiagonal = new JRadioButton("反对角序");

    JComboBox boxSize = new JComboBox();

    JTextField fieldType = new JTextField();

    JTextField fieldSize = new JTextField();

    JButton buttonNew = new JButton("新遍历");

    JButton buttonNext = new JButton("下一步");

    JPanel panelShow = new JPanel();

    public Visualization() {

        //设置布局,初始化界面,为按钮注册监听器:

        //Add your code here.

    }

    public void actionPerformed(ActionEvent e) {

        //监听两个按钮发出的命令

        //Add your code here.

    }

    private void displayCurrent() {

        // 这是一个经常要被用到的功能。也就是对当前的遍历状态进行展示

        // Add your code here.

        // 为了能够正确显示,一般要用到这两句话:

        panelShow.revalidate();

        panelShow.repaint();

    }

    public static void main(String[] args) {

        new Visualization();

    }

}

package exp3;

import exp2.*;

import java.awt.*;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.awt.event.*;
import java.awt.Dimension;
import java.util.Enumeration;

public class Visualization extends JFrame implements ActionListener {
    public static final int MIN_SIZE = 3;
    public static final int MAX_SIZE = 13;
    public static final String[] TYPES = {"行主序", "列主序", "对角", "反对角"};
    private int whichType = 0;
    private SquareTraversal squareTraversal = null;

    JRadioButton radioRowMajor = new JRadioButton("行主序");
    JRadioButton radioColMajor = new JRadioButton("列主序");
    JRadioButton radioDiagonal = new JRadioButton("对角");
    JRadioButton radioAntiDiagonal = new JRadioButton("反对角");
    JComboBox boxSize = new JComboBox();
    JTextField fieldType = new JTextField("行主序",8);
    JTextField fieldSize = new JTextField("3",8);
    JButton buttonNew = new JButton("新遍历");
    JButton buttonNext = new JButton("下一步");
    private int current = 0;
    private int Row = 3;
    JPanel panelShow = new JPanel();
    public String getSelectedButtonText(ButtonGroup buttonGroup)
    {
        for (Enumeration buttons = buttonGroup.getElements(); buttons.hasMoreElements(); )
        {
            AbstractButton button = (AbstractButton) buttons.nextElement();
            if (button.isSelected())
                return button.getText();

        }
        return null;
    }

    class MyFrame extends java.awt.Frame{
        MyFrame()
        {
            super("You_id_class_name");
            setLayout(new BorderLayout());
            setSize(1000, 800);
            int h = this.getHeight();
            int w = this.getWidth();

            Panel form = new Panel();
            form.setLayout(new GridLayout(3,3,20,20));
            for(int i = 1 ; i < 10 ; i++)
            {
                if(i == 1)
                {
                    Panel q = new Panel();
                    q.setBackground(Color.BLUE);
                    form.add(q);
                    continue;
                }
                Panel p = new Panel();
                p.setBackground(Color.GREEN);
                form.add(p);
            }
            squareTraversal = new RowMajor(3);
            add(form, BorderLayout.CENTER);



            Panel sum = new Panel();
            sum.setLayout(new GridLayout(2, 1));
            sum.setPreferredSize(new Dimension(w, 60));

            Panel header1 = new Panel();
            header1.setLayout(new GridLayout(1, 5));
            header1.setPreferredSize(new Dimension(sum.getWidth(), 30));

            ButtonGroup bu = new ButtonGroup();
            radioAntiDiagonal.setContentAreaFilled(false);
            radioDiagonal.setContentAreaFilled(false);
            radioColMajor.setContentAreaFilled(false);
            radioRowMajor.setContentAreaFilled(false);
            header1.add(radioRowMajor);
            header1.add(radioColMajor);
            header1.add(radioDiagonal);
            header1.add(radioAntiDiagonal);
            bu.add(radioRowMajor);
            bu.add(radioColMajor);
            bu.add(radioDiagonal);
            bu.add(radioAntiDiagonal);
            radioRowMajor.setSelected(true);

            Panel select = new Panel();
            select.setLayout(new GridLayout(1, 2));
            for(int i = MIN_SIZE ; i <= MAX_SIZE ; i ++)
                boxSize.addItem(i);

            Font sname = new Font("仿宋",Font.PLAIN, 12);
            JLabel Sname = new JLabel("设置方阵大小");
            Sname.setFont(sname);
            select.add(Sname);
            select.add(boxSize);
            header1.add(select);


            Panel header2 = new Panel();
            header2.setLayout(new GridLayout(1, 4));
            header2.setPreferredSize(new Dimension(sum.getWidth(), 30));

            JLabel Typename = new JLabel("当前遍历类型:");
            Font typename = new Font("仿宋",Font.PLAIN, 12);
            Typename.setFont(typename);
            Panel type = new Panel(new GridLayout(1, 2));
            fieldType.setEnabled(false);

            type.add(Typename);
            type.add(fieldType);
            type.setPreferredSize(new Dimension(header2.getWidth()/4, header2.getHeight()));
            header2.add(type);

            JLabel Sizename = new JLabel("当前方阵大小:");
            Font sizename = new Font("仿宋",Font.PLAIN, 12);
            Sizename.setFont(sizename);
            Panel size = new Panel(new GridLayout(1 ,2));
            fieldSize.setEnabled(false);
            size.add(Sizename);
            size.add(fieldSize);
            size.setPreferredSize(new Dimension(header2.getWidth()/4, header2.getHeight()));
            header2.add(size);

            Panel p1 = new Panel();
            p1.setLayout(new GridLayout(1,2));
            p1.setPreferredSize(new Dimension(header2.getWidth()/4, (header2.getHeight())/2));
            JLabel j1 = new JLabel();
            j1.setPreferredSize(new Dimension(p1.getWidth()/2, p1.getHeight()));
            buttonNew.setPreferredSize(new Dimension(p1.getWidth()/2, p1.getHeight()));


            buttonNew.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    String str = getSelectedButtonText(bu);
                    fieldType.setText(str);
                    fieldSize.setText(String.valueOf(boxSize.getSelectedItem()));

                    int row = Integer.valueOf(String.valueOf(boxSize.getSelectedItem()));
                    for(int i = 0 ; i <= 3 ; i ++)
                        if(str == TYPES[i])
                            whichType = i;
                    if(whichType == 0)
                        squareTraversal = new RowMajor(row);
                    else if(whichType == 1)
                        squareTraversal = new ColMajor(row);
                    else if(whichType == 2)
                        squareTraversal = new Diagonal(row);
                    else if(whichType == 3)
                        squareTraversal = new AntiDiagonal(row);
                    int first;
                    if(whichType == 2)
                        first = (row-1)*row;
                    else
                        first = 0;
                    current = first;

                    form.removeAll();
                    form.setLayout(new GridLayout(row,row,20, 20));
                    for(int i = 1 ; i <= row*row ; i ++)
                    {
                        Panel p = new Panel();
                        p.setBackground(Color.GREEN);
                        form.add(p);
                    }
                    Panel p = (Panel)form.getComponent(first);
                    p.setBackground(Color.BLUE);
                    form.revalidate();
                    form.repaint();
                }
            });
            p1.add(j1);
            p1.add(buttonNew);
            header2.add(p1);

            Panel p2 = new Panel();
            p2.setLayout(new GridLayout(1,2));
            p2.setPreferredSize(new Dimension(header2.getWidth()/4, (header2.getHeight())/2));
            JLabel j2 = new JLabel(" ");
            j2.setPreferredSize(new Dimension(p2.getWidth()/2, p2.getHeight()));
            buttonNext.setPreferredSize(new Dimension(p2.getWidth()/2, p2.getHeight()));


            buttonNext.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    int row = Integer.valueOf(String.valueOf(boxSize.getSelectedItem()));
                    if((squareTraversal.getNext()) != null) {
                        SquarePoint next = squareTraversal.getNext();
                        int Next = next.getRow() * row + next.getCol();
                        System.out.print(Next);
                        Panel P = (Panel) form.getComponent(Next);
                        P.setBackground(Color.BLUE);
                        Panel Q = (Panel) form.getComponent(current);
                        Q.setBackground(Color.RED);
                        current = Next;
                        squareTraversal.step(next);
                    }

                }
            });
            p2.add(j2);
            p2.add(buttonNext);
            header2.add(p2);

            sum.add(header1);
            sum.add(header2);
            add(sum, BorderLayout.NORTH);



            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setLocationRelativeTo(null);

            addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
            setVisible(true);
        }

    }
    public Visualization() {
        //设置布局,初始化界面,为按钮注册监听器:
        // Add your code here.
        MyFrame f = new MyFrame();

    }
    public void actionPerformed(ActionEvent e) {
        //监听两个按钮发出的命令
        //Add your code here.
    }

    private void displayCurrent() {
        // 这是一个经常要被用到的功能。也就是对当前的遍历状态进行展示
        // Add your code here.
        // 为了能够正确显示,一般要用到这两句话:
        panelShow.revalidate();
        panelShow.repaint();
    }
    public static void main(String[] args) {
        new Visualization();
    }
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值