六角头螺栓c级:如何制作六角按钮(hexagon swing)

I have written a short game. In the existing implementation I have a GridBagLayout with ons located as chess board. Each on occupies the whole grid. Game works fine. My next task is to change the board to be consist of hexagonal ons, not rectangles like currently. I completely don't know how to do this. Buttons should look like these on the picture: target

2

这不是最漂亮的方式,但它至少会给你一个想法:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class HexagonPattern extends JPanel {
    private static final long serialVersionUID = 1L;
    private static final int ROWS = 7;
    private static final int COLUMNS = 7;
    private HexagonButton[][] hexButton = new HexagonButton[ROWS][COLUMNS];
    public HexagonPattern() {
        setLayout(null);
        initGUI();
    }
    public void initGUI() {
        int offsetX = -10;
        int offsetY = 0;
        for(int row = 0; row < ROWS; row++) {
            for(int col = 0; col < COLUMNS; col++){
                hexButton[row][col] = new HexagonButton(row, col);
                hexButton[row][col].addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        HexagonButton clickedButton = (HexagonButton) e.getSource();
                        System.out.println("Button clicked: [" + clickedButton.getRow() + "][" + clickedButton.getCol() + "]");
                    }
                });
                add(hexButton[row][col]);
                hexButton[row][col].setBounds(offsetY, offsetX, 105, 95);
                offsetX += 87;
            }
            if(row%2 == 0) {
                offsetX = -52;
            } else {
                offsetX = -10;
            }
            offsetY += 76;
        }
    }
    public static void main(String[] args) {
        HexagonPattern hexPattern = new HexagonPattern();
        JFrame frame = new JFrame();
        frame.setTitle("Hexagon Pattern");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(new Point(700, 300));
        frame.add(hexPattern);
        frame.setSize(550, 525);
        frame.setResizable(false);
        frame.setVisible(true);
    }
    //Following class draws the Buttons
    class HexagonButton extends JButton {
        private static final long serialVersionUID = 1L;
        private static final int SIDES = 6;
        private static final int SIDE_LENGTH = 50;
        public static final int LENGTH = 95;
        public static final int WIDTH = 105;
        private int row = 0;
        private int col = 0;
        public HexagonButton(int row, int col) {
            setContentAreaFilled(false);
            setFocusPainted(true);
            setBorderPainted(false);
            setPreferredSize(new Dimension(WIDTH, LENGTH));
            this.row = row;
            this.col = col;
        }
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Polygon hex = new Polygon();
            for (int i = 0; i < SIDES; i++) {
                hex.addPoint((int) (50 + SIDE_LENGTH * Math.cos(i * 2 * Math.PI / SIDES)), //calculation for side
                        (int) (50 + SIDE_LENGTH * Math.sin(i * 2 * Math.PI / SIDES)));   //calculation for side
            }       
            g.drawPolygon(hex);
        }
        public int getRow() {
            return row;
        }
        public int getCol() {
            return col;
        }
    }
}

试试看!

这个程序包括 2 类:

HexagonButton,它使用 Graphics 将六边形绘制成JButton。当调用getRowgetCol时,它还返回行和列的值。

HexagonPattern,这是主类。它通过用setBounds(x, y, width, height)布局它们来制作图案。它使用ActionListener通过调用getRowgetCol来打印单击的六边形的坐标。

就像我说的,这不是最伟大的程序。如果你想让六边形变小,那么你必须改变很多变量。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(968)
加减法自动出题小程序:3表加减法(addition subtraction table)
上一篇
Cmg电机:Arduino电机坡道
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(43条)