栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使我的自定义Swing组件可见?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使我的自定义Swing组件可见?

我尝试扩展JPanel,但在菜单下有一个10x10 pix灰色小框。至少开始

使用JComponent时,首选大小为(0,0),这就是为什么什么都看不到的原因。

当您使用JPanel时,默认情况下使用FlowLayout,并且在将每个组件添加到面板之前/之后,FlowLayout的间隙为5像素。由于您没有添加任何组件,因此首选大小仅是间隙,因此您获得的大小为(10,10)。

因此,在进行自定义绘画时,您需要重写getPreferredSize()方法,以为要实现的自定义绘画返回适当的值。

编辑:

import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;public class ChessBoard extends Jframe implements MouseListener, MouseMotionListener{    JLayeredPane layeredPane;    JPanel chessBoard;    JLabel chessPiece;    int xAdjustment;    int yAdjustment;    public ChessBoard()    {        Dimension boardSize = new Dimension(600, 600);        //  Use a Layered Pane for this this application        layeredPane = new JLayeredPane();        layeredPane.setPreferredSize( boardSize );        layeredPane.addMouseListener( this );        layeredPane.addMouseMotionListener( this );        getContentPane().add(layeredPane);        //  Add a chess board to the Layered Pane        chessBoard = new JPanel();        chessBoard.setLayout( new GridLayout(8, 8) );        chessBoard.setPreferredSize( boardSize );        chessBoard.setBounds(0, 0, boardSize.width, boardSize.height);        layeredPane.add(chessBoard, JLayeredPane.DEFAULT_LAYER);        //  Build the Chess Board squares        for (int i = 0; i < 8; i++)        { for (int j = 0; j < 8; j++) {     JPanel square = new JPanel( new BorderLayout() );     square.setBackground( (i + j) % 2 == 0 ? Color.red : Color.white );     chessBoard.add( square ); }        }        // Add a few pieces to the board        ImageIcon duke = new ImageIcon("dukewavered.gif"); // add an image here        JLabel piece = new JLabel( duke );        JPanel panel = (JPanel)chessBoard.getComponent( 0 );        panel.add( piece );        piece = new JLabel( duke );        panel = (JPanel)chessBoard.getComponent( 15 );        panel.add( piece );    }        public void mousePressed(MouseEvent e)    {        chessPiece = null;        Component c =  chessBoard.findComponentAt(e.getX(), e.getY());        if (c instanceof JPanel) return;        Point parentLocation = c.getParent().getLocation();        xAdjustment = parentLocation.x - e.getX();        yAdjustment = parentLocation.y - e.getY();        chessPiece = (JLabel)c;        chessPiece.setLocation(e.getX() + xAdjustment, e.getY() + yAdjustment);        layeredPane.add(chessPiece, JLayeredPane.DRAG_LAYER);        layeredPane.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));    }        public void mouseDragged(MouseEvent me)    {        if (chessPiece == null) return;        //  The drag location should be within the bounds of the chess board        int x = me.getX() + xAdjustment;        int xMax = layeredPane.getWidth() - chessPiece.getWidth();        x = Math.min(x, xMax);        x = Math.max(x, 0);        int y = me.getY() + yAdjustment;        int yMax = layeredPane.getHeight() - chessPiece.getHeight();        y = Math.min(y, yMax);        y = Math.max(y, 0);        chessPiece.setLocation(x, y);     }        public void mouseReleased(MouseEvent e)    {        layeredPane.setCursor(null);        if (chessPiece == null) return;        //  Make sure the chess piece is no longer painted on the layered pane        chessPiece.setVisible(false);        layeredPane.remove(chessPiece);        chessPiece.setVisible(true);        //  The drop location should be within the bounds of the chess board        int xMax = layeredPane.getWidth() - chessPiece.getWidth();        int x = Math.min(e.getX(), xMax);        x = Math.max(x, 0);        int yMax = layeredPane.getHeight() - chessPiece.getHeight();        int y = Math.min(e.getY(), yMax);        y = Math.max(y, 0);        Component c =  chessBoard.findComponentAt(x, y);        if (c instanceof JLabel)        { Container parent = c.getParent(); parent.remove(0); parent.add( chessPiece ); parent.validate();        }        else        { Container parent = (Container)c; parent.add( chessPiece ); parent.validate();        }    }    public void mouseClicked(MouseEvent e) {}    public void mouseMoved(MouseEvent e) {}    public void mouseEntered(MouseEvent e) {}    public void mouseExited(MouseEvent e) {}    public static void main(String[] args)    {        Jframe frame = new ChessBoard();        frame.setDefaultCloseOperation( DISPOSE_ON_CLOSE );        frame.setResizable( false );        frame.pack();        frame.setLocationRelativeTo( null );        frame.setVisible(true);     }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/609566.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号