Как совместить JtextArea, JButton, paintComponent в java?

Есть класс:

public class MyClass extends JPanel{}

В нем есть переменная:

JTextArea MyTextArea_0

и:

JButton MyButton_0;

Есть также protected void paintComponent(Graphics g){}

Вопрос вот в чем: Как совместить все это в рабочем коде (одном окне JFrame), чтобы можно было рисовать линии, фон, простые объекты и все это в paintComponent(){repaint()}, а поверх этого рисованного была бы кнопка MyButton_0 и MyTextArea_0? Задача усложнена вот чем: нужно задать вручную параметры кнопок, в роде бы так: .setBounds(My_x,My_y,MySize_X,MySize_Y)


Ответы (1 шт):

Автор решения: Arthur Alunts
/*
*author:[email protected]
*/
package j;

import javax.swing.*;
import java.awt.event.*;
import java.awt.AWTException;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Robot;
import java.awt.Stroke;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Main extends JPanel implements MouseWheelListener, MouseMotionListener {
    public static int MyX=10,MyY=10,MyDelta=10;
    public static Container cPane;
    public static double width = 0.0, height = 0.0;
    public static JTextArea qp1;
    public static JButton b1;
    
    public Main() throws IOException, AWTException {

        this.addMouseWheelListener(this);
        addMouseListener(new MouseAdapter() {

            @Override
            public void mousePressed(MouseEvent evt) {

            }

            @Override

            public void mouseClicked(MouseEvent evt) {
                int x = evt.getX();
                int y = evt.getY();
                if (evt.getClickCount() >= 2) {
                }

            }

            @Override
            public void mouseReleased(MouseEvent evt) {
                int x = evt.getX();
                int y = evt.getY();

            }
        });

        addMouseMotionListener(this);
    }
   
  
protected void paintComponent(Graphics g)
{
      super.paintComponent(g);
      ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
              RenderingHints.VALUE_ANTIALIAS_ON);
      Graphics2D g2d = (Graphics2D) g;
      
      g2d.setRenderingHint(
              RenderingHints.KEY_TEXT_ANTIALIASING,
              RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
      g.setFont(new Font("serif", Font.BOLD, 50));
      Color c1 = new Color(232, 134, 36);  
      g2d.setColor(c1);     

Stroke stroke1 = new BasicStroke(1f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);//Параметры линии...
Stroke stroke2 = new BasicStroke(2f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);//Параметры линии...

g2d.setStroke(stroke2);//Выбираем заданные выше параметры линии..

             g2d.setColor(Color.GREEN);
             g2d.fillRect(0,0,1024,768);
             g2d.setColor(Color.RED);
             g2d.fillRect(100+MyDelta,100+MyDelta,200,350);
             g2d.setColor(c1);
             
             g2d.fillOval(222+MyX,222+MyY,122,122);
             g2d.setColor(Color.BLACK);
             g2d.drawLine(111,111,422,422);
             
            
            
            try { 
                MyDelta++;
                 Thread.sleep(0); 
                 jFrame.repaint();
          } catch (Exception ex) {ex.printStackTrace();
                  
          
             
             } 
}

    @Override
    public void mouseMoved(MouseEvent event) {

        int x = event.getX();
        int y = event.getY();

        setCursor(Cursor.getDefaultCursor());
        //repaint();
    }

    @Override
    public void mouseDragged(MouseEvent event) {

        int x = event.getX();
        int y = event.getY();

    }

    public static JFrame jFrame;

    public static void click(int x, int y, int x2, int y2, int ms) throws AWTException, InterruptedException {
        Robot b11 = new Robot();

        b11.mouseMove(x, y);
        b11.mousePress(InputEvent.BUTTON1_DOWN_MASK);
        Thread.sleep(ms);//Здесь можно преминить уравнение прямой проходящее через 2 точки!!!
        b11.mouseMove(x2, y2);
        b11.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
        //b11.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
    }
   

    public static void main(String[] args) throws AWTException, InterruptedException, IOException, FileNotFoundException {
        

JPanel jPanel = new JPanel();
JScrollPane scr11 = new JScrollPane(qp1);
jPanel.add(scr11);
       
        jFrame = new JFrame();
         jFrame.setBounds(0,0,1024,768);
        Font f = new Font(Font.SANS_SERIF, 14, 14);//Cool 3
        qp1 = new JTextArea();
        qp1.setFont(f);
        //qp2.setFont(f);
        qp1.setBackground(Color.WHITE);
        qp1.setOpaque(false);
        qp1.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        qp1.setBackground(new Color(255, 255, 255, 255));
        qp1.setBounds( (int) (2.0 * 1.47), (int) (2 * 1.2111), 500, 124);
        qp1.setText("Scroll on the out of JTextArea on starting app");
        qp1.append("\n");
        qp1.append("Click on the JTextArea and Type some text");
        qp1.append("\n");
        qp1.append("Click on the Button to Type some text automatically prepeared in the code");
        
        jFrame.add(qp1);
        b1 = new JButton("Append text");
        b1.setBounds((int) (544.0), (int) (44.0), (int) (100), (int) (100));
        b1.setToolTipText("Write");
        jFrame.add(b1);
        
      
        
        cPane = jFrame.getContentPane();
        cPane.add(new Main());
      
       
         new Main();  
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setVisible(true);
      
        

        b1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                 System.out.println("Object As Appended");
                 qp1.append("\n");
                 qp1.append("This is my Text which Automatically Prepeared");
                 
            }
              
            
        });
        jFrame.setTitle("My_Java_PaintComponent+JButton+JTextArea_1.0");
        jFrame.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                

                try {
                    
                    System.exit(0);
                } catch (Exception ex) {

                    ex.printStackTrace();

                } }});}
    
public static int ObjectIsNear = 0;
    @Override
    public void mouseWheelMoved(MouseWheelEvent e) { 
          
       
      if(e.getWheelRotation()==1){
            MyY=MyY+12;MyX=MyX+20;
            ObjectIsNear=0;  
            jFrame.repaint();}
      
      else if(e.getWheelRotation()==-1){
          MyY=MyY-12;MyX=MyX-20;
          ObjectIsNear=1;  
          jFrame.repaint();}
          try {
            
           
        } catch (Exception ex) {
            ex.printStackTrace();
            
        }}}

→ Ссылка