【发布时间】:2021-11-24 08:11:21
【问题描述】:
我从 maven 导入了问题的标题 问题是我从画布(awt one)中获取图形的地步 并将其添加到 jpanel 这似乎没有被绘制
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;
public class CELSIUS {
private JButton button1;
private JPanel panel1;
public java.awt.image.BufferedImage bf;
public Canvas cnv;
public JFrame jf;
private boolean annadido=false;
public CELSIUS() {
panel1.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
super.mouseMoved(e);
System.out.println("Hallo\n");
}
});
}
private void createUIComponents() {
panel1 = new JPanel();
button1 = new JButton("OK");
bf=new BufferedImage(100,100,BufferedImage.TYPE_BYTE_BINARY);
Graphics gc=bf.getGraphics();
gc.setColor(Color.BLACK);
gc.fillRect(0,0,100,100);
cnv=new Canvas();
cnv.setSize(100,100);
gc.setColor(Color.white);
gc.drawString("francisco",10,10);
gc.dispose();
}
public static void main(String []args){
JFrame jf=new JFrame();
CELSIUS mycell=new CELSIUS();
mycell.jf=jf;
mycell.jf.setSize(500,500);
jf.setContentPane(mycell.panel1);
mycell.cnv.getGraphics().drawImage(mycell.bf,0,0,jf);
jf.getContentPane().add(mycell.cnv);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
}
所以会发生什么 ??? 注意:如果我在鼠标移动处理程序中多次添加它,有时会按预期工作 在黑底白字上显示闪烁的弗朗西斯科
【问题讨论】:
-
1) 不要使用 getGraphics() 进行自定义绘画。 2) 不要使用 Canvas 进行自定义绘画。 3) 而是覆盖
JPanel的paintComponent(...)方法。阅读 Custom Painting 上的 Swing 教程中的部分,了解更多信息和工作示例,以帮助您入门。请注意,如果您只是绘制图像,那么一种简单的方法是使用JLabel和ImageIcon。该教程还有一个关于How to Use Icons的部分。 -
向您提供建议,但总之,我将添加新功能,通过 xor 操作与位图相结合,以便在丰富的色彩环境中获得图像的部分反转,但现在需要第一阶段的工作
-
org.eclipse.swt:org.eclipse.swt.win32.win32.x86_64:4.3是 swt - 与 Swing 或 AWT 无关 -
谢谢我会删除它
-
但现在需要第一阶段的工作 - 这就是为什么你得到了教程的链接。如果您不了解进行自定义绘画的基础知识,就无法编写复杂的绘画程序。