java - 我无法在图形顶部显示按钮

标签 java swing graphics

我的问题是如何在使用 Graphics 创建的圆圈顶部显示按钮。我的代码是:

public class Grafik extends JFrame {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Grafik frame = new Grafik();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


    public Grafik() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 784, 419);

        JPanel contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JButton btnNewButton = new JButton("Click");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                fire();
            }
        });

        btnNewButton.setBounds(64, 73, 32, 32);
        contentPane.add(btnNewButton);
    }

    public void fire()
    {
        JPanel panel = new JPanel(){
            @Override
            public void paint(Graphics g)
            {
                g.setColor(Color.black);
                g.drawOval(20, 20, 400, 400);
                g.fillOval(20,20,400,400);

                g.setColor(Color.white);
                g.drawOval(60, 60, 300, 300);
                g.fillOval(60,60,300,300);



            }
        };

        panel.setBounds(10, 27, 383, 233);
        setContentPane(panel);

        JButton btn = new JButton();
        btn.setIcon(new ImageIcon("C:\\Users\\nuria\\Desktop\\icon1.png"));
        btn.setBounds(75, 76, 32, 32);
        panel.add(btn);

    }   
}

这段代码是我项目的一小部分。我的项目中有很多面板,并且我的 fire 方法没有首先被调用。我的意思是第六个面板调用了 fire 方法。我必须用按钮画两个圆圈。这些按钮应该位于两个圆圈之间。但我无法直接显示按钮。当我将鼠标悬停在按钮上时,它们会显示。我想在第六个面板打开时立即显示按钮。 我上面有两个按钮。单击第一个按钮时,应打开另一个面板并在它们之间显示圆圈(使用图形创建)和另一个按钮(带有图标)。

最佳答案

    JPanel panel = new JPanel(){
        @Override
        public void paint(Graphics g)
        {

不要重写paint()。自定义绘制是通过重写 paintComponent() 来完成的,并且不要忘记调用 super.paintComponent() 作为第一条语句。

当前代码的问题在于,通过覆盖绘制,您更改了面板的默认绘制逻辑,并且子组件永远不会被绘制。

查看 Custom Painting 上的 Swing 教程中的部分了解更多信息和示例,尤其是仔细观察绘制机制部分。

关于java - 我无法在图形顶部显示按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45532074/

相关文章:

java - 如何重用抛出异常的过程?

java - AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException : -1

c - B 样条曲线从原点结束并开始?

algorithm - 最近格点类型题

java.lang.Object 无法转换为 boolean

java - OneToOne 映射中的 MappedBy

java饼图高度未正确放置

java - 使用invokeLater 和不使用invokeLater 显示JFrame 有什么区别?

c# - 当循环条件为日期时图形不绘制。 C#, 窗体

java Swing : Notifying clients on server restart or shutdown