Добавление JButton - Java

Узнай цену своей работы

Формулировка задачи:

есть код, где двигается шар по фрейму. Когда добавляю кнопку то все меркнет и становиться ничего не видно. Как сделать, чтобы кнопка была на виду?
package com.company;
 
import com.sun.corba.se.impl.orbutil.graph.Graph;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class MainFrame extends JFrame implements ActionListener
{
    int bx=200;
    int by=200;
    int speedx=10;
    double speedy=10;
    int bsize=20;
 
    Timer tm = new Timer(30, this);
 
    public void actionPerformed(ActionEvent arg0)
    {
        Graphics g = (Graphics)this.getGraphics();
 
        this.update(g);
        g.translate(0, 0);
        g.fillOval(bx, by, bsize, bsize);
        bx+=speedx;
        by+=speedy;
 
        if (bx < bsize-10)
        {
            speedx=-speedx;
        }
        if (bx>this.getWidth()-30)
        {
            speedx=-speedx;
        }
        if (by < 33)
        {
            speedy=-speedy;
        }
        if (by>this.getHeight()-30)
        {
            speedy=Math.random()*10;
            speedy=-speedy;
        }
    }
 
    public MainFrame()
    {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(500, 500);
        setVisible(true);
        tm.start();
        getContentPane().setBackground(Color.yellow);
    }
 
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MainFrame();
            }
        });
    }
}

Решение задачи: «Добавление JButton»

textual
Листинг программы
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class MainFrame extends JFrame {
    private JButton jButton = new JButton("Button");
    private MPanel jPanel = new MPanel();
 
    Timer tm = new Timer(30, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            repaint();
            //tm.start();
        }
    });
 
    private class MPanel extends JPanel {
        int bx = 200;
        int by = 200;
        int speedx = 10;
        double speedy = 10;
        int bsize = 20;
 
        public MPanel() {
            setPreferredSize(new Dimension(500, 450));
        }
 
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.translate(0, 0);
            g.fillOval(bx, by, bsize, bsize);
            bx += speedx;
            by += speedy;
 
            if (bx < bsize - 10) {
                speedx = -speedx;
            }
            if (bx > this.getWidth() - 30) {
                speedx = -speedx;
            }
            if (by < 33) {
                speedy = -speedy;
            }
            if (by > this.getHeight() - 30) {
                speedy = Math.random() * 10;
                speedy = -speedy;
            }
        }
    }
 
    private class BListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (jPanel.by < 50) {
                jPanel.by = +50;
            }
        }
    }
 
 
    public MainFrame() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500, 500);
        setVisible(true);
        tm.start();
        jButton.addActionListener(new BListener());
        add(jButton, BorderLayout.NORTH);
        jPanel.setBackground(Color.yellow);
        add(jPanel);
    }
 
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MainFrame();
            }
        });
    }
}

Оцени полезность:

12   голосов , оценка 4.333 из 5