繁体   English   中英

如何将JLabel添加到JPanel

[英]How to add JLabel to JPanel

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的任何部分中的应用程序,因此modelPanel没有layoutManager。

如何使JLabels显示在modelPanel上?

使用空的 LayoutManager意味着您需要完成LayoutManager所缺的工作,这包括设置子Component的位置大小 (后者在您的代码中未完成)。 一个非常简单的示例,它将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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM