如何将JLabel添加到JPanel

时间:2016-07-27 17:31:10

标签: java swing jlabel

public void mouseClicked(MouseEvent e){
        JLabel label = ((JLabel)e.getSource());
        //searches for the label in the label arrayList 
        for(int i = 0; i < labels.size(); i++)
            if(labels.get(i) == label){
                JLabel newLabel = new JLabel();
                newLabel.setIcon(label.getIcon());
                newLabel.addMouseMotionListener(motionListener);
                modelPanel.add(newLabel);
                newLabel.setLocation(150, 160);
                newLabel.setVisible(true);
                modelPanel.revalidate();
                modelPanel.repaint();
                System.out.println("added" +modelPanel.getX()+ " " + modelPanel.getY());
                System.out.println(newLabel.getX() + " " + newLabel.getY());
            return;
            }                       
    }

上面的代码应该创建一个新的JLabel并将其添加到JPanel modelPanel。 System.out.println显示已添加对象但在运行时无法在屏幕上显示。

modelPanel没有layoutManager,因为我正在构建一个允许用户将创建的标签拖放到modelPanel的任何部分的应用程序。

如何在modelPanel上显示JLabel?

1 个答案:

答案 0 :(得分:4)

使用 null LayoutManager意味着您需要完成缺少的LayoutManager的工作,这包括同时设置位置大小(后者未在您的代码中完成)。一个非常简单的示例,它将JLabel动态添加到空布局JPanel:

JFrame frame = new JFrame();
final JPanel panel = new JPanel();
panel.setLayout(null);
final int size = 400;
javax.swing.Timer timer = new javax.swing.Timer(500, new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e) {
        JLabel lab = new JLabel("HERE");
        lab.setLocation((int)(size * Math.random()), (int)(size * Math.random()));
        lab.setSize(new Dimension(40,20));
        panel.add(lab);
        panel.repaint();
    }
});

frame.add(panel);
frame.setSize(size, size);
frame.setVisible(true);
timer.start();