2

我想为自己编写一个模拟确定性有限自动机(如 JFLAP)的小工具。

JFrame的只是空白。如何让用户在左键单击时放置按钮?以及如何为该按钮分配正确的值(例如按下时调用哪个函数)。

我知道我可以放置一个按钮

JButton button = new JButton("Press me");
frame.add(button);

但我不知道如何动态编码。

欢迎任何帮助。另外,如果您认为用按钮解决我的问题很愚蠢,我想听听改进建议。

4

1 回答 1

3

每次在. JButton_ 将放置在发生鼠标单击的位置。文本将是一个数字。每个将显示不同的数字。JFrameJFrameJButtonJButtonJButton

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());
    }
}
于 2020-12-05T11:20:49.650 回答