paintComponent()永远不会在JFrame上执行 [英] paintComponent () never executes on a JFrame

查看:105
本文介绍了paintComponent()永远不会在JFrame上执行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

import javax.swing.SwingUtilities;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.*;
import java.util.*;

public class test1 extends JFrame implements MouseListener  {
    private JPanel JP = new JPanel();

    public test1() {
        JP.setBorder(BorderFactory.createLineBorder(Color.black)); 
        JP.addMouseListener(this);
        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); 
        this.add(JP);
        this.pack();
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
              public void run() {
                    test1 frame = new test1();
                    frame.setSize(400,400);
                    frame.setVisible(true);
              }
        });
    }

    public void mouseClicked(MouseEvent e) {
        //drawCircle(e.getX(), e.getY());
        //repaint();
        ballball ball;
        ball = new ballball();
        //ball.paintComponent(Graphics g);
        System.out.println("ballball");

    }

    public void mouseExited(MouseEvent e) {

    }

    public void mousePressed(MouseEvent e) {
        //this.mouseX=e.getX();
        //this.mouseY=e.getY();
    }

    public void mouseReleased(MouseEvent e) {

    }

    public void mouseEntered(MouseEvent e) {

    }    
}







class ballball extends test1 implements Runnable {

    private int squareX = 50;
    private int squareY = 50;
    private int squareW = 100;
    private int squareH = 100;
    public boolean draw;

    private Vector<Object> v = new Vector<Object>();

    public ballball() {

        /*addMouseListener(new MouseAdapter() {

            public void mousePressed(MouseEvent e) {
                draw = true;
                //Thread thread1 = new Thread(this.moveSquare(50, 50));
                repaint();
                //moveSquare(e.getX(),e.getY());
            }
        });*/


        /*addMouseMotionListener(new MouseAdapter() {
            public void mouseDragged(MouseEvent e) {
                moveSquare(e.getX(),e.getY());
            }
        });*/
        System.out.println("ball created");
        this.repaint();

    }

    public void run() {

    }

    private void moveSquare(int x, int y) {
        int OFFSET = 1;
        if ((squareX!=x) || (squareY!=y)) {
            repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET);
            squareX=x;
            squareY=y;
            repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET);
        } 
    }

    public void paint(Graphics g) {
        g.drawString("abcasdfasffasfas", 10, 10);
    }

    //@Override
    public void paintComponent(Graphics g) {
        //if (draw) {
        // existing code
        System.out.println("paint");
        //super.paintComponent(g);       

        //g.drawString("This is my custom Panel!",10,20);
        //g.setColor(Color.RED);
        //g.fillRect(squareX,squareY,squareW,squareH);
        //g.setColor(Color.BLACK);
        //g.drawRect(squareX,squareY,squareW,squareH);
        Shape circle = new Ellipse2D.Float(squareX,squareY,100f,100f);
        Graphics2D ga = (Graphics2D)g;
        ga.draw(circle);
        //}
    }  
}

程序是单击创建圆圈,球类类扩展test1,当test1检测到鼠标点击时,创建了球形对象。但是永远不会执行paint / paintComponent方法。在我的程序结构中,是否可以将圆绘制到超类JPanel?

The aim of the program is to click to create the circle, the ballball class extends the test1, when test1 detect the mouse click, the ballball object created. But the paint/paintComponent method is never be executed. In my program structure, is it possible to paint the circle to the super class JPanel?

推荐答案

JFrame 不是 JComponent ,它没有可以覆盖的 paintComponent 方法。相反,您可以扩展 JPanel 并将其添加到框架中。

JFrame is not a JComponent, it doesn't have a paintComponent method you can override. Instead you could extend a JPanel and add it to the frame.

这篇关于paintComponent()永远不会在JFrame上执行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆