JLabel分别在不同的JPanel中,每个JPanel的大小也是动态的,如何不用设置Bounds或自适设置Bounds,只要能获得那个JLabel被点击就可以了。谢谢大家!!

解决方案 »

  1.   

    在JLabel添加一个(MousrListener)。
    当JLabel被点击的时候, 获得被点击的组件:MouseEvent.getSource()。
    并触发被点击后要处理的事件。
      

  2.   

    哈哈,我现在正好也遇到这个问题了。
    用面向对象的方式解决。
    把一组控件作为一个对象。
    同时设置一个ID,就可以知道了在你的例子里,把一个Label和一个Panel作为一个selectionobj。给他们加个附加属性---ID
    这样当你点中的时候至少就可以根据ID去找到你点的是那一组了。也就能知道是哪一个Label了实在不愿意,那你就搞一大堆If--else判断吧
      

  3.   

    windforce9811(数页薄纸,写尽百岁人生。万般心疼,难解世间情愁。)  给出你的代码例子好吗
    ,让我学习一下。
      

  4.   

    public class PlacardRowObj implements Serializable {    private static final long serialVersionUID = 4490406102424874231L;    private PlacardInfoObj infoObj;   //这是在程序中具体使用的对象     /**
         * .
         * 
         */
        public PlacardRowObj() {
        }    /**
         * 新加了creatControl 方法,用来构造Panel
         * 
         * @return plaRow
         */
        public JPanel createControl() {
            JPanel plaRow = new JPanel(new FlowLayout());
            plaRow.add(createIdLabel());
            plaRow.add(createNameLabel());
            plaRow.add(createTitleLabel());
            plaRow.add(createPlaDateLabel());        plaRow.setOpaque(false);        return plaRow;
        }    // ====================================================================
        private JLabel createIdLabel() {
            JLabel idLabel = new JLabel();
            idLabel.setText(infoObj.getId());
            idLabel.setOpaque(false);
            return idLabel;
        }    private JLabel createNameLabel() {
            JLabel nameLabel = new JLabel();
            nameLabel.setText(infoObj.getPromulgatorID());
            nameLabel.setOpaque(false);
            return nameLabel;
        }    private JLabel createTitleLabel() {
            JLabel titleLabel = new JLabel();
            titleLabel.setText(infoObj.getPlacardTitle());
            titleLabel.setOpaque(false);
            return titleLabel;
        }    private JLabel createPlaDateLabel() {
            JLabel dateLabel = new JLabel();
            dateLabel.setText(infoObj.getSendDate().toString());
            dateLabel.setOpaque(false);
            return dateLabel;
        }    // ====================================================================  
        /**
         * .
         * 
         * @return infoObj
         */
        public PlacardInfoObj getInfoObj() {
            return infoObj;
        }    /**
         * .
         * 
         * @param infoObj
         *            PlacardInfoObj
         */
        public void setInfoObj(PlacardInfoObj infoObj) {
            this.infoObj = infoObj;
        }}
    ======================================
    上面的就是我现在用的一个改造后的实体对象。里面加了createControl方法,用来生成Panel
    以后选择的时候,就相当于选择了这个对象,我可以从这个对象中找到原始的数据信息
    在我这里是PlacardInfoObj infoObj