java - 使用 PaintComponent 在 Jpanel 上绘制矩形不起作用

标签 java swing paintcomponent

我想在 DrawPanel 上绘制一个矩形。这个矩形应该是一个对象。 当我添加它时,该地方将是灰色的,但绘制组件不会绘制,所以我什么也看不到。

Drawpanel.java将被添加到内容 Pane 上,内容 Pane 位于JFrame上。

import java.awt.event.*;
import java.awt.*;

import javax.swing.JPanel;

public class DrawPanel extends JPanel implements MouseListener{

private static final long serialVersionUID = 6725416157621860479L;

public DrawPanel() {
    addMouseListener(this);
    this.setLayout(null);
    setPreferredSize(new Dimension(500, 500));
}

Graphics2D g2d = null;
@Override
protected void paintComponent(Graphics g) {
    // TODO Auto-generated method stub
    super.paintComponent(g);
    g2d = (Graphics2D)g;
    System.out.println("paint!!!!!!!");
    for (int i = 0; i < 1500; i++) {
        if (i %10 == 0) {
            g2d.setColor(new Color(242, 242, 242));
            g2d.drawLine(0, i, 1500, i);// _
            g2d.drawLine(i, 0, i, 1500);// |
        }
    }
    g2d.setColor(Color.BLUE);
}

@Override
public void mouseClicked(MouseEvent arg0) {
    if (START.modus != 4) {
        return;
    }

    System.out.println("X_" + arg0.getX() + " | Y_"+arg0.getY());
    int x = (arg0.getX()) - (arg0.getX()%10);
    int y = (arg0.getY()) - (arg0.getY()%10);
    System.out.println("x_" + x + " " + "y_" + y);
    Dia d = new Dia(x, y);
    d.setBounds(x, y, 50, 50);
    add(d);
}

@Override
public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub
}

@Override
public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub
}

@Override
public void mousePressed(MouseEvent arg0) {
    // TODO Auto-generated method stub
}

@Override
public void mouseReleased(MouseEvent arg0) {
    // TODO Auto-generated method stub
}

}

不会被绘制的对象是:

import java.awt.event.*;
import java.awt.*;

import javax.swing.*;

public class Dia extends JPanel implements MouseListener {

private Point startcoord;
private int sizex = 50;
private int sizey = 20;

public Dia(int x, int y) {
    super();
    addMouseListener(this);
    this.startcoord = new Point(x, y);
    setPreferredSize(new Dimension(sizex, sizey));
}

@Override
public void paintComponents(Graphics g) {
    super.paintComponents(g);
    System.out.println("Diaaaaa1");
    Graphics2D g2d = (Graphics2D) g;
    g2d.drawLine(0, 0, 50, 50);
    // g.setColor(Color.RED);
    g.drawRect(0, 0, sizex, sizey);
    g.setColor(Color.GREEN);
    g.drawString("TEST", 3, 3);
    System.out.println("Diaaaaa");
}

public Point getStartcoord() {
    return startcoord;
}

public void setStartcoord(Point startcoord) {
    this.startcoord = startcoord;
}

@Override
public void mouseClicked(MouseEvent e) {
    System.out.println("diac");

}

@Override
public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub

}

public static void main(String[] args) {

    Dia c = new Dia(10, 10);
    //c.textsize();
    JFrame a = new JFrame();
    a.setVisible(true);
    a.setSize(new Dimension(100, 100));
    JPanel b = new JPanel();
    a.add(b);
    b.add(c);
}


}

当我在 dia 类中启动 main 时,我什么也没看到。为什么dia不会启动paintComponent方法?

最佳答案

重写另一个方法真的很简单 paintComponents()但你需要paintComponent() 。改变这一点,一切都会成功。

关于java - 使用 PaintComponent 在 Jpanel 上绘制矩形不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20502958/

相关文章:

java - 如何从 UIMA 和简单的 NLP 任务开始?

java - 在不是 Activity 的类中使用 Android 中的 TelephonyManager

Java:文件[]到JTable

java - 单击按钮即可打开 JDialog

java - 禁用选择 jTextfield 的所有突出显示

java - 在自定义 JPanel 上添加按钮

java - actionPerformed 跳过一步

java - 从 MouseListener 查找图 block

java - 无法连接到servlet中的mysql数据库

java - getHeight() 如何在 java 中工作,尤其是在 paintComponent 中