0

Java でチェス インターフェイスを作成しようとしていますJLayeredPane。問題は、ピースがレイヤード ペインに追加されないことです。

これは私のクラスのコードですDragImage(すべてのピースは、チェス盤にドラッグ アンド ドロップできるこのクラスのインスタンスになります)。

class DragImage extends JComponent implements MouseMotionListener {
        private static final long serialVersionUID = 1L;
        int imageWidth = 52, imageHeight = 52;
        int imageX, imageY;
        Image img;

        public DragImage(Image i) {
            img = i;
            repaint();
            addMouseMotionListener(this);
        }

        public void mouseDragged(MouseEvent e) {
            imageX = e.getX();
            imageY = e.getY();
            repaint();
        }

        public void mouseMoved(MouseEvent e) {
        }

        public void paint(Graphics g) {
            Graphics2D g2 = (Graphics2D) g;

            g2.drawImage(img, imageX, imageY, this);
        }

    }

これが のコードですJPanel

画像のアドレスは正しいのですが、パネルに表示されません。

class MyPanel extends JPanel {
        private JLayeredPane layeredPane;
        private JLabel imageContainer = new JLabel();
        private ImageIcon img;

        MyPanel() {
            super();
            img = new ImageIcon("chessboard.png");
            this.imageContainer.setIcon(img);
            this.layeredPane = new JLayeredPane();
            layeredPane.setPreferredSize(new Dimension(416, 416));
            layeredPane.add(imageContainer, 50);
            imageContainer.setBounds(0, 0, img.getIconWidth(),
                    img.getIconHeight());
            int pozx = 52, pozy = 52;
            for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                    if(tabla[i][j]!="--"){
                    DragImage img = new DragImage(Toolkit.getDefaultToolkit().getImage("pieces\\" + tabla[i][j] + ".png"));
                    //System.out.println("pieces\\" + tabla[i][j] + ".png");
                    img.setBounds(pozx,pozy,img.imageWidth,img.imageHeight);
                    layeredPane.add(img,100);   //this doesn't work
                    }
                    pozx+=52;
                }
                pozy+=52;
                pozx=52;
            }

            this.add(layeredPane);
        }
}

...

frame = new JFrame();
frame.setVisible(true);
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new MyPanel();
frame.add(panel);
frame.pack();
4

1 に答える 1

0

最初に Layeredpane を使用してから、2 つのパネルを画像用に、もう 1 つのパネルをコンポーネント用に取り付けます。2 番目のパネルはパレット レイヤーである必要があり、コンポーネントが表示されます。

于 2013-12-12T06:45:34.640 に答える