在Java中为jpanel添加动态按钮

时间:2015-05-26 17:39:15

标签: java swing jpanel jbutton

我正在尝试用Java编写一个程序,它会在JPanel中显示一个按钮,点击该按钮。为此,我运行了方法,使用以下代码:

 public void run(){
    panel.addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e){
            JButton button = new JButton();
            button.setVisible(true);
            button.setAlignmentX(e.getXOnScreen());
            button.setAlignmentY(e.getYOnScreen());
            panel.add(button);
            panel.revalidate();
            panel.repaint();
        }
    });
}

问题是,在我点击的地方永远不会出现按钮。

3 个答案:

答案 0 :(得分:1)

单击面板时,此代码应显示一个按钮。它不会出现在光标处,但应该很容易添加。每次单击面板时,它也会生成一个新按钮。如果您只想要一个按钮,只需在mousePressed事件

之外移动此行JButton button = new JButton();
public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setSize(500, 500);
    JPanel panel = new JPanel();
    panel.setSize(500, 500);
    frame.add(panel);
    frame.show();
    run(panel);
}

 public static void run(JPanel panel){
        panel.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e){
                JButton button = new JButton();
                button.setVisible(true);                 
                panel.add(button);
                panel.revalidate();
            }
       });
}

答案 1 :(得分:1)

  

一个按钮出现在JPanel中,当点击它时。

button.setAlignmentX(e.getXOnScreen());
button.setAlignmentY(e.getYOnScreen());

您使用了几种不正确的方法。

要在组件中定位组件,您需要使用:

button.setLocation(...);

但是,您无法使用getXOnScreen()方法,因为这是相对于屏幕的。您需要相对于面板定位组件。所以你需要使用:

button.setLocation(e.getX(), e.getY());

这仍然不够,因为当您使用null布局时,您还负责确定组件的大小。所以你还需要使用:

button.setSize( button.getPreferredSize() );

您还需要确保面板使用空布局,否则布局管理器将覆盖尺寸/位置。

答案 2 :(得分:0)

这对我有用(即使没有添加按钮标签)

public static void main(String[] args) {

        final JPanel panel = new JPanel();

        JFrame frame = new JFrame("test swing");
        frame.setAlwaysOnTop(true);
        frame.setSize(400, 200);
        frame.add(panel);
        frame.setVisible(true);

        panel.addMouseListener(new MouseAdapter() {

            @Override
            public void mousePressed(MouseEvent e){
                JButton button = new JButton();
                button.setVisible(true);
                button.setAlignmentX(e.getXOnScreen());
                button.setAlignmentY(e.getYOnScreen());
                panel.add(button);
                panel.revalidate();
                panel.repaint();
            }
        });
    }