-2
RescaleOp 사용에 대한 Oracle 웹 사이트의 자습서를 따르고 있습니다. 애플릿없이 자습서를 작성하고 모든 것을 스윙으로 변환하려고합니다. 코드는 다음과 같습니다.페인트, 다시 그리기 및 PaintComponent
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 행에 디버그 문이 표시되지 않습니다. 이유는 알 수 없습니다. 감사합니다.
정확한 문제는 무엇입니까? 좀 더 설명해주세요. 39 호선에 뭐가 있니? 이 게시물의 제목은 무엇이라고 말합니까? – Braj
LoadImage 란 무엇입니까? – MadProgrammer
그리고 super.paintComponent를 호출하는 것을 잊지 마십시오. – MadProgrammer