java - 在paintComponent绘制的形状上添加按钮

标签 java button jpanel paintcomponent

我的程序由不同文件中的两个类(test 和paintClass)组成。在paintClass 类中,我使用paintComponent 方法绘制了一个5x5 的正方形板。我想在大方 block 中的每个小方 block 中添加按钮。当我运行代码时,我没有看到任何按钮。我想通过在 PaintComponent 绘制的形状上使用 jpanel 来拥有 25(5x5) 个按钮。这可能吗?如果是的话我该怎么做?

编辑:问题是循环。 Number 的默认值为 0,因此循环不起作用。我一开始就定义了数字。它解决了问题。其中一个倒数也是错误的。我将 j = 0 更改为 j = 1。

import javax.swing.*;
import java.awt.*;

public class test
{

   public static void main(String[] args) 
   {

       JFrame frame = new JFrame("buttons");
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setSize(250,250);
       PaintClass paint = new PaintClass();
       paint.repaint();
       f1.getContentPane().add(paint);
       frame.pack();
       frame.setVisible(true);
    }
}



import javax.swing.*;
import java.awt.*;

public class PaintClass extends JPanel
{
    private Graphics g;
    private int interval,side,number;
    private JButton button;

    public PaintClass() 
    {
        number = 5;
        button = new JButton();
        setLayout(new GridLayout(5,5));
        for(int i = 0; i <= number - 1; i++)
        {
            for(int j = 1; j <= number - 1; j++)
            {
                button = new JButton();//ADDED
                button.setBounds(i * interval, 0, interval, interval);
                add(button);
            }
            button = new JButton();//ADDED
            button.setBounds(0, i * interval, interval, interval);
            add(button);
        }
    }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        this.repaint();
        side = 250;
        number = 5;
        interval = side / number;
        g.drawRect(0,0, side, side);

        for(int i = 0; i <= number - 1; i++)
        {
            for(int j = 0; j <= number - 1; j++)
            {
                 g.drawLine(i * interval, 0, i * interval, side);
            }
            g.drawLine(0, i * interval, side, i * interval);
        }

    }   
}

最佳答案

选择其中之一:使用 GridLayout 添加按钮,或使用 PaintComponent 绘制按钮。如果是前者,您应该 a) 定义循环约束(现在为 0) b) 为每个循环创建一个新的 JButton(您的代码当前重用该实例) c) 注册适当的 ActionListener 以响应事件。如果是后者,您需要注册适当的监听器(例如 MouseListener )来响应用户生成的事件。

关于java - 在paintComponent绘制的形状上添加按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29526166/

相关文章:

java - 如何在 retrofit2 中捕获两个不同对象数组的 api 响应?

java - 序列化 HttpSession 对象

java - JVM 崩溃后如何以及在哪里获取报告?

java - 我如何使用 LayoutManager 来获得这样的布局?

java - GridBagLayout 中的 JPanel 位置不正确

Java NumberFormatException?

javascript - 可以链接图像映射以打开浏览文件 Controller 吗?

ios - 如何在 iOS (Xcode) 中的提交按钮内实现分段控制?

wpf - 如何删除 WPF 按钮上的默认鼠标悬停效果?

java JPanel,动态添加组件到它和JScrollPane