to 楼主:btn.setLocation(e.getX(), e.getY());
|
V
btn.setBounds(e.getX(), e.getY(), 50, 50);这样就可以随机布局和显示了不过我Swing不熟悉,还不清楚根本原因,再研究研究有一点很奇怪JButton btn = new JButton("XXX");
这样创建的Swing component,btn.getWidth()和btn.getHeight()都是0唉,再去查查

解决方案 »

  1.   

    把button的成明为类的变量,然后控制它的显示,不然它只在函数运行时存在一瞬,根本看不到的。
      

  2.   

    import java.io.*;import java.util.*;import java.awt.*;
    import java.awt.event.*;import javax.swing.*;
    import javax.swing.event.*;public class NullLayoutJPanel
    {
            public static void main(String[] args)
            {
                    final JPanel p = new JPanel();
        p.setLayout(null); // ***
                    JFrame frame = new JFrame("Test");
                    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
                    frame.getContentPane().add(p, BorderLayout.CENTER);
                    frame.setSize(Toolkit.getDefaultToolkit().getScreenSize());
                    frame.addMouseListener(new MouseAdapter()
                    {
                            public void mousePressed(MouseEvent e)
                            {
                                    System.out.println("xxx");                                JButton btn = new JButton("xxx");
                                    btn.setBounds(e.getX(), e.getY(),60,20);
                                    p.add(btn);                                p.revalidate();
                                    p.repaint();
                            }
                    });
                    frame.setVisible(true);
            }
    }
      

  3.   

    to Xiruo:能否解释一下为什么JButton btn = new JButton("XXX");
    这样创建的Swing component,btn.getWidth()和btn.getHeight()都是0
      

  4.   

    哦,楼上的说得对刚查了一下在任何给定的时刻,一个组件不是有效的就是无效的;无效的组件需要被布局,而有效的组件不需被布局。刚生成的组件对象,是无效的。无效:invalidated  
    有效:validated