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?
答案 0 :(得分:4)
使用 null LayoutManager
意味着您需要完成缺少的LayoutManager的工作,这包括同时设置位置和大小子组件的em>(后者未在您的代码中完成)。一个非常简单的示例,它将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();