我正在尝试用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();
}
});
}
问题是,在我点击的地方永远不会出现按钮。
答案 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();
}
});
}