1
JPanel에 그리는 데 문제가 있습니다. 여기 제가 현재하고있는 일이 있습니다. 이미지를이 클래스의 파일에 작성하고 그려야하는 정확한 이미지를 얻었으므로 이미지가 유효하다는 것을 알고 있지만 JPanel에 그릴 때 즉시 지워진 것처럼 보입니다. 나는 구글을 시도했지만 건조 해졌다. 어떤 아이디어?JPanel에서 내 그래픽을 표시하지 않습니다.
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import utilities.Log;
public class Signature extends JFrame {
/**
*
*/
private static final long serialVersionUID = 8908413895953622794L;
private JPanel contentPane;
private JPanel panel;
private BufferedImage image;
/**
* Create the frame.
*/
private Signature() {
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 631, 338);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblDateSigned = new JLabel("Date Signed:");
lblDateSigned.setBounds(48, 248, 91, 14);
contentPane.add(lblDateSigned);
JLabel lblDateGoesHere = new JLabel("date goes here");
lblDateGoesHere.setBounds(48, 262, 83, 14);
contentPane.add(lblDateGoesHere);
JButton btnClose = new JButton("Close");
btnClose.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
dispose();
}
});
btnClose.setBounds(521, 258, 89, 23);
contentPane.add(btnClose);
panel = new JPanel() {
private static final long serialVersionUID = -7148070953904995529L;
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (image != null) {
Graphics gc = this.getGraphics();
// gc.setColor(Color.WHITE);
gc.drawImage(image, 0, 0, null);
}
}
@Override
public void repaint() {
super.repaint();
if (image != null) {
Graphics gc = this.getGraphics();
// gc.setColor(Color.WHITE);
gc.drawImage(image, 0, 0, null);
// gc.dispose();
}
}
};
panel.setBounds(10, 11, 600, 200);
contentPane.add(panel);
}
public byte[] getImageByteArray() {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] imageInBytes = null;
try {
ImageIO.write(image, "jpg", baos);
baos.flush();
imageInBytes = baos.toByteArray();
baos.close();
} catch (IOException e) {
Log.showMessage("Error processing signature: " + e.toString());
}
return imageInBytes;
}
public void setVisible() {
setVisible(true);
panel.repaint();
}
public Signature(BufferedImage image) {
this();
this.image = image;
}
}
왜 그들은 '널 (null)'레이아웃을 사용하고 있습니까? ( – MadProgrammer
@ Hovercraft Full of Eels B/C 나는이 바보에 대해 많은 생각을 해왔습니다. 덕분에 도움이되었습니다. 어리석은 롤 –
@ReidMac : 위의 추가 제안 –