내 프로그램으로하고 싶은 것은 이미지를 클릭하면 JOptionPane과 함께 사각형이 나옵니다. 다만, JOptionPane가 유일한 것입니다.내 paintComponent가 작동하지 않는 이유는 무엇입니까?
나는 방법을 바꾸고 더 많은 수업을 추가했지만 아무 것도 효과가 없었습니다.> < 누군가 내 문제를 해결할 수 있습니까? 여기에 내 코드가있다.
다음은 내 사진을 선택할 수있는 파일 선택기라고합니다. 또한 레이블과 같은 여러 가지 요소가 여기에 있습니다.
public Help(){
fc.setDialogTitle("Choose an image file to begin:");
int returnval = fc.showOpenDialog(null);
if (returnval == JFileChooser.APPROVE_OPTION){ //when user selects a file, value returned will be JFileChooser.APPROVE_OPTION
File file = fc.getSelectedFile(); //the File value of the selection is returned from a call on getSelectedFile
try{
image = ImageIO.read(file); //reads and loads File as image
}
catch (IOException e){}
System.out.println("You chose to open this file: " + file.getName());
}else
System.out.println("No file selected.");
icon = new ImageIcon(image);
label = new JLabel(icon);
tagName = new JLabel(input);
label.addMouseListener(new ImagePanel());
label.addMouseMotionListener(new ImagePanel());
panel.add(tagName);
}
마지막으로, 번거로운 paintComponent가 포함 된 ImagePanel 클래스입니다. 또한, 몇 가지 mouseListeners.
class ImagePanel extends JPanel implements MouseListener, MouseMotionListener{
@Override
public void mouseClicked(MouseEvent event) {
// TODO Auto-generated method stub
x = event.getX();
y = event.getY();
input = JOptionPane.showInputDialog("Enter tag name");
tagName.setText("You have tagged: " + input);
System.out.println(input);
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void paintComponent(Graphics g){
super.paintComponent(g);
if(image != null && isRectPresent){
g.setColor(Color.DARK_GRAY);
g.drawRect(x-50, y-50, 100, 100);
}
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
}
}
코드를 컴파일하고 직접 볼 수 있습니다. 당신이 무엇을해야하는지 안다면 나에게 머리를 줘라. 고마워.
메모 :'@ Override' 주석을 추가하여 실제로 'paintComponent'를 대체해야합니다. 또한, 청취자 등을 추가하는 것과 같이'paintComponent'에서 * do * do * do *를하지 마십시오 ;-) – aioobe
오버 라이딩은 무엇을할까요? 롤 나는 모든 xD에서 그것을 얻지 못한다 (나는 정말로 멍청이다.). 당신의 응답을 주셔서 감사합니다. – alicedimarco
테스트 할 때 가능한 한 문제를 단순화하려고합니다. 모든 불필요한 메소드를 삭제하고, 단지'g.setColor();와 같이 매우 단순한'paintComponent'를 만듭니다. g.drawRect()'무조건. 우리에게 결과를 알려주십시오 – pajton