让用户将按钮放在 Java
Let the user place Buttons in Java
我想编写一个小工具来为自己模拟确定性有限自动机(如 JFLAP)。
我的 JFrame
只是一片空白。如何让用户在左键单击时放置按钮?以及如何为该按钮分配正确的值(例如按下时调用哪个函数)。
我知道我可以用
放置一个按钮
JButton button = new JButton("Press me");
frame.add(button);
但我不知道如何对其进行动态编码。
欢迎任何帮助。另外,如果您认为用按钮解决我的问题很愚蠢,我想听听改进建议。
每次在 JFrame
中单击鼠标时,以下代码都会将 JButton
添加到“空白” JFrame
中。 JButton
将放置在鼠标单击发生的位置。 JButton
文本将是一个数字。每个 JButton
将显示不同的数字。
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
public class AdButton extends MouseAdapter implements Runnable {
private int counter;
private JFrame frame;
private JPanel contentPane;
public void mouseClicked(MouseEvent event) {
int x = event.getX();
int y = event.getY();
JButton button = new JButton(String.valueOf(++counter));
Dimension dim = button.getPreferredSize();
button.setBounds(x, y, dim.width, dim.height);
contentPane.add(button);
contentPane.revalidate();
contentPane.repaint();
}
@Override
public void run() {
showGui();
}
private void showGui() {
frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
contentPane = (JPanel) frame.getContentPane();
contentPane.setLayout(null);
contentPane.addMouseListener(this);
frame.setSize(400, 450);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new AdButton());
}
}
我想编写一个小工具来为自己模拟确定性有限自动机(如 JFLAP)。
我的 JFrame
只是一片空白。如何让用户在左键单击时放置按钮?以及如何为该按钮分配正确的值(例如按下时调用哪个函数)。
我知道我可以用
放置一个按钮JButton button = new JButton("Press me");
frame.add(button);
但我不知道如何对其进行动态编码。
欢迎任何帮助。另外,如果您认为用按钮解决我的问题很愚蠢,我想听听改进建议。
每次在 JFrame
中单击鼠标时,以下代码都会将 JButton
添加到“空白” JFrame
中。 JButton
将放置在鼠标单击发生的位置。 JButton
文本将是一个数字。每个 JButton
将显示不同的数字。
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
public class AdButton extends MouseAdapter implements Runnable {
private int counter;
private JFrame frame;
private JPanel contentPane;
public void mouseClicked(MouseEvent event) {
int x = event.getX();
int y = event.getY();
JButton button = new JButton(String.valueOf(++counter));
Dimension dim = button.getPreferredSize();
button.setBounds(x, y, dim.width, dim.height);
contentPane.add(button);
contentPane.revalidate();
contentPane.repaint();
}
@Override
public void run() {
showGui();
}
private void showGui() {
frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
contentPane = (JPanel) frame.getContentPane();
contentPane.setLayout(null);
contentPane.addMouseListener(this);
frame.setSize(400, 450);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new AdButton());
}
}