이미지 위에 격자를 배치하고 싶습니다. 이미지가 paintComponent
메서드를 사용하여 이미지를 보유하는 JLabel
을 사용했습니다.이 이미지는 내 프로젝트의 다른 단계에서 변경 될 것이므로 JLayer
클래스 GridDrawer extends LayerUI
은 그리드를 만드는 데 도움이됩니다. 작은 예제에서는 drawRect()
만 사용했습니다. 방법).JLayer를 사용하여 이미지 위에 격자 배치
내 코드 :
GridPhoto (메인) 클래스 :
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package gridphoto;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.SwingUtilities;
/**
*
* @author VJ
*/
public class GridPhoto {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
new GUI();
} catch (IOException ex) {
Logger.getLogger(GridPhoto.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
}
GUI 클래스 :
package gridphoto;
import java.awt.image.BufferedImage;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JLayer;
import javax.swing.plaf.LayerUI;
public class GUI {
JFrame frame;
JPanel panel;
JLayer<JLabel> GridLayer;
JLabel imagelabel;
LayerUI<JLabel> GridUI;
BufferedImage img;
public GUI() throws IOException {
frame = new JFrame("GridImage Test");
panel = new JPanel();
img = ImageIO.read(new File("/Users/VJ/Desktop/gs.png"));
imagelabel = new JLabel() {
public void paintComponent(Graphics g) {
g.drawImage(img.getScaledInstance(500, 500, BOTTOM), 0, 0, null);
}
};
GridUI = new GridDrawer();
GridLayer = new JLayer(imagelabel, GridUI);
panel.setLayout(new BorderLayout());
frame.setLayout(new BorderLayout());
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 700);
panel.add(GridLayer);
frame.add(panel);
frame.setVisible(true);
}
public class GridDrawer extends LayerUI<JLabel> {
public void paintComponent(Graphics g) {
g.drawRect(0, 0, 250, 250);
}
}
}
내 문제는 심지어 그것은 단지 이미지를 표시 JLayer
JPanel
에 추가 한 후와 그리드가 아니야. 예를 들어 paintComponent
GridDrawer
클래스의 메서드는 Rectangle
만 그립니다.
코드에 무엇이 잘못되었거나 을 사용하여 Image
에 표를 배치하는 것 외에 다른 방법이 있습니까?
출력.
1) 더 나은 도움을 받으려면 [MCVE] (http://stackoverflow.com/help/mcve) (최소한의 완전한 검증 가능한 예) 또는 [SSCCE] (http://www.sscce.org/) (짧은, 자체 포함, 올바른 예). 이 코드는 화면에 'complete'가되도록 'main (String [])'코드가 필요합니다. 2)이 예제의 이미지를 얻는 한 가지 방법은 [이 Q & A] (http://stackoverflow.com/q/19209650/418556)에서 볼 수있는 이미지로 핫 링크하는 것입니다. –