이라고 불립니다. JFrame에는 버튼과 BufferedImgae가 있습니다.이 버튼은 내 방식 (drawLine, pisel로 래스터 그림 픽셀 그리기)을 사용하여 모양과 그림을 그리는 데 사용됩니다. 여기 내가 paintComponent는
public class Main extends javax.swing.JPanel {
JPanel panel;
JFrame fr;
Graphics2D g2;
ImageIcon icon;
BufferedImage img;
public void init()
{
fr = new JFrame("Lab 2");
fr.setMinimumSize(new Dimension(1350, 650));
fr.setMaximumSize(fr.getMinimumSize());
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel glowny = new JPanel(new BorderLayout());
glowny.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
glowny.add(getBorderCenter(), BorderLayout.CENTER);
fr.add(glowny);
fr.pack();
fr.setVisible(true);
}
private JScrollPane getBorderCenter()
{
img = new BufferedImage(fr.getWidth()-40, fr.getHeight()-40-50, BufferedImage.TYPE_INT_RGB); //20+20 odstępy w glowny, 50 - szerokość paska z guzikami
icon = new ImageIcon(img);
return new JScrollPane(new JLabel(icon));
}
public static void main(String [] args)
{
Main m = new Main();
m.init();
}
}
그런 다음 내가 이중 버퍼링을 사용하는 BufferedImage의에 그리는 시도 JFrame의
에 일을 추가하는 방법이다. 다음 예제에서는 BufferedImage 색상을 검은 색 (현재)에서 흰색으로 변경합니다.@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println("paintComponent");
WritableRaster raster = img.getRaster();
DataBuffer db = raster.getDataBuffer();
int[] pixels = ((DataBufferInt)db).getData();
int adres = 0;
for (int y = 0; y < img.getHeight(); y++)
{
adres = y * img.getWidth();
for (int x = 0; x < img.getWidth(); x++)
{
pixels[adres] = 16777215;
adres += 1;
}
}
Graphics2D g2dComponent = (Graphics2D) g;
g2dComponent.drawImage(img, null, 0, 0); // draw buffer on screen
}
나는 paintaint()를 호출하여 repaint()를 이해합니다. 문제는 내가 repaint()를 호출하는 방법이 중요하지 않다는 것입니다.
fr.repaint();
glowny.repaint();
repaint();
결코 호출되지 않습니다.
'paintComponent()'를 대체하는 컴포넌트는 무엇입니까? – trashgod
더 나은 도움을 받으려면 SSCE를 게시하십시오. –
나는 이해하지 못한다, 모든 코드는 한 클래스에서 나온다 – kamilosdzikos