"다음"및 "이전"JButton을 사용하여 볼 수있는 작은 이미지 갤러리가 있습니다. 그것은 올바르게 작동합니다.JPanel의 이미지에 직사각형을 인쇄하십시오.
내가하고 싶은 것은 이미지를 클릭 할 때 표시되는 사각형에 (채우기가없는 프레임 만) 페인트하는 것입니다. 예를 들어 포인트 (230,150)를 클릭하면, 그 rect 왼쪽 아래 각도로 rect가 나타나길 원합니다.
이
내 코드는, 나는 많은 일을 해봤 않고 아무 일하지 :import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Rectangle2D;
import java.awt.Image;
public class rectOnGallery extends JFrame{
private static final long serialVersionUID = 1L;
private ImageIcon myImage1;
private ImageIcon myImage2;
private ImageIcon myImage3;
private ImageIcon myImage4;
JPanel ImageGallery = new JPanel();
private ImageIcon[] myImages = new ImageIcon[4];
private int curImageIndex=0;
int width;
int height;
public rectOnGallery(){
double scale = 0.666667;
width = (int) (scale * 612);
height = (int) (scale * 792);
myImage1 = new ImageIcon(((new ImageIcon("NewSign1.jpg")).getImage()).getScaledInstance(width, height, Image.SCALE_SMOOTH));
myImage2 = new ImageIcon(((new ImageIcon("pdf2.jpg")).getImage()).getScaledInstance(width, height, Image.SCALE_SMOOTH));
myImage3 = new ImageIcon(((new ImageIcon("pdfimg.jpg")).getImage()).getScaledInstance(width, height, Image.SCALE_SMOOTH));
myImage4 = new ImageIcon(((new ImageIcon("images.jpg")).getImage()).getScaledInstance(width, height, Image.SCALE_SMOOTH));
ImageGallery.add(new JLabel (myImage1));
myImages[0]=myImage1;
myImages[1]=myImage2;
myImages[2]=myImage3;
myImages[3]=myImage4;
ImageGallery.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent evt) {
if (myImages[curImageIndex] != null) {
double x = (getWidth() - width)/2;
double y = (getHeight() - height)/2;
Rectangle2D.Double bounds = new Rectangle2D.Double(x, y, width, height);
if (bounds.contains(evt.getPoint())) {
System.out.println("You clicked on " + evt.getX() + " x " + evt.getY());
**** HERE GOES SOMETHING THAT WRITES THE FRAME IN THE
**** POSITION (ent.getX() , evt.getY())
}
}
}
});
add(ImageGallery, BorderLayout.NORTH);
JButton PREVIOUS = new JButton ("Previous");
JButton NEXT = new JButton ("Next");
JPanel buttons = new JPanel();
buttons.setLayout(new GridLayout(1,4));
buttons.add(PREVIOUS);
buttons.add(NEXT);
add(buttons, BorderLayout.SOUTH);
//register listener
PreviousButtonListener PreviousButton = new PreviousButtonListener();
NextButtonListener NextButton = new NextButtonListener();
//add listeners to corresponding componenets
PREVIOUS.addActionListener(PreviousButton);
NEXT.addActionListener(NextButton);
}
private class PreviousButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e){
if(curImageIndex>0 && curImageIndex <= 3){
ImageGallery.remove(0);
curImageIndex -- ;
ImageIcon TheImage= myImages[curImageIndex];
ImageGallery.add(new JLabel (TheImage));
ImageGallery.validate();
ImageGallery.repaint();
}
else{
ImageGallery.remove(0);
ImageGallery.add(new JLabel (myImage1));
curImageIndex=0;
ImageGallery.validate();
ImageGallery.repaint();
}
}
}
private class NextButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e){
if(curImageIndex>=0 && curImageIndex < 3){
ImageGallery.remove(0);
curImageIndex ++ ;
ImageIcon TheImage= myImages[curImageIndex];
ImageGallery.add(new JLabel (TheImage));
ImageGallery.validate();
ImageGallery.repaint();
}
else{
ImageGallery.remove(0);
ImageGallery.add(new JLabel (myImage4));
curImageIndex=3;
ImageGallery.validate();
ImageGallery.repaint();
}
}
}
public static void main (String [] args){
provaPosFirma frame = new provaPosFirma();
frame.setSize(500, 600);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
}
}
을 나는 또한 다른 이미지에 사각형의 이미지를 페인트 tryed 한 대안 일하지만이 neighter 일 .
내가 잘못하고있는 것을 알고 있으며, 그게 더 쉽다는 것을 알고 있지만, 나는 이것을 이해하지 못하고있다. 어쨌든 당신이 한 번 표시됩니다 rect 또는 다른 직사각형 이미지를 그려 도움이 될 수 있다면.
표준 Java 명명 규칙을 따르십시오. 변수 이름은 대문자로 시작하면 안됩니다. 구성 요소 추가/제거를 계속하지 마십시오. setIcon (...) 메서드를 사용하여 표시된 이미지를 변경하면됩니다. – camickr
@camickr 팁 주셔서 감사합니다. setIcon()에 대해 알고 있지만 이미지가 완전히 바뀌고 다른 이미지가 이전에 인쇄되지 않습니다. – Igr