[英]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.