Java 绘制、重新绘制和绘制组件
我正在关注Oracle网站上关于重新缩放使用的教程。我试图在没有小程序的情况下完成教程,并将所有内容转换为swing。代码如下Java 绘制、重新绘制和绘制组件,java,swing,paint,Java,Swing,Paint,我正在关注Oracle网站上关于重新缩放使用的教程。我试图在没有小程序的情况下完成教程,并将所有内容转换为swing。代码如下 import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.WindowAdapt
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.awt.image.RescaleOp;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/*
* How to load an Image from an external file.
*/
public class ARGB extends JPanel {
BufferedImage img;
float[] scales = { 1f, 1f, 1f, 0.5f };
float[] offsets = new float[4];
RescaleOp rop;
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.white);
g2d.fillRect(0, 0, getWidth(), getHeight());
g2d.setColor(Color.black);
g2d.setFont(new Font("Dialog", Font.BOLD, 24));
g2d.drawString("Java 2D is great!", 10, 80);
g2d.drawImage(img, rop, 0, 0);
System.out.println("hi");
}
public ARGB() {
try {
img = ImageIO.read(new File("src/strawberry.jpg"));
} catch (IOException e) {
e.printStackTrace();
// TODO: handle exception
}
}
public Dimension getPreferredSize() {
if (img == null) {
return new Dimension(100, 100);
} else {
return new Dimension(img.getWidth(), img.getHeight());
}
}
public void setOpacity(float opacity) {
scales[3] = opacity;
rop = new RescaleOp(scales, offsets, null);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
final ARGB argb = new ARGB();
JFrame frame = new JFrame("See Through Image");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.add("Center", new LoadImage());
JSlider opacitySlider = new JSlider(0, 100);
frame.add("South", opacitySlider);
opacitySlider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
JSlider slider = (JSlider) e.getSource();
argb.setOpacity(slider.getValue() / 100f);
argb.repaint();
}
});
Dimension size = argb.getPreferredSize();
Dimension sliderSize = opacitySlider.getPreferredSize();
frame.setSize(size.width, size.height + sliderSize.height);
frame.pack();
frame.setVisible(true);
}
}
当我运行它时,我在第39行没有看到我的调试语句。我真的不明白为什么。
谢谢 您尚未将ARGB类的JPanel对象ie.e实例添加到框架中。您已添加LoadImage对象。它在哪里??debug语句在ARGB vlass中。您必须添加ARGB对象。那么只有它的绘制方法才会被调用您的确切问题是什么?请再解释一下。第39行是什么?这篇文章的标题是什么?别忘了给super.paintComponent打电话