Почему мой paintComponent не работает? - PullRequest
0 голосов
/ 01 декабря 2011

Я думаю, что причина, по которой мой paintComponent не работает, потому что я поместил изображение как JLabel в JPanel.Я хочу использовать drawRect, чтобы нарисовать прямоугольник, когда я нажимаю с помощью MouseListener.

Мое изображение является BufferedImage от JFileChooser

JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode (JFileChooser.FILES_AND_DIRECTORIES);

    if (fileChooser.showOpenDialog(panelPic) == JFileChooser.APPROVE_OPTION) 
    {
        try 
        {
            pic = ImageIO.read(fileChooser.getSelectedFile());
            //reading the image of the selected file
        } catch (IOException ioe) 
        {
            JOptionPane.showMessageDialog(panelPic, "Error Reading File!");
        }

        System.out.println("getFileOrDirectory exited");
    }

    else if (fileChooser.showOpenDialog(panelPic) == JFileChooser.CANCEL_OPTION)
        System.exit(1);
    return pic;

, тогда моя картинка прошла бы через это

pic = getFileOrDirectory();
picLabel = new JLabel (new ImageIcon(pic));
panelPic.add(picLabel);
System.out.println("picLabel added to panel");
repaint();
frame.validate();

panelPic, где я хотел бы, чтобы изображение было видно,тогда это мой код для краски, которая на самом деле не работает -_- поэтому я удалил метод drawImage, который на самом деле не работает для меня.

public void paint(Graphics g)
{
    System.out.println("paint entered"); // just a checker if the program passed through this method
    super.paint(g);

    g.setColor(Color.BLACK);
    g.drawRect(x-50, y-50, 100, 100);
    frame.validate();
}

Я хотел бы знать, как это исправитьпроблема.

ОБНОВЛЕНО !!Это SSCCE моего кода

public class TrialCode extends JPanel implements MouseListener, ActionListener
{ JFrame frame;
  JPanel panelPic;
  BufferedImage pic;
  JButton getImg;

  public TrialCode ()
{
    frame = new JFrame("Java Project");
    panelPic = new JPanel();
    getImg = new JButton("Get Image");
    frame.getContentPane().add(BorderLayout.CENTER, panelPic);
    frame.setSize(900, 700);
    frame.setVisible(true);
    panelPic.addMouseListener(this);
    getImg.addActionListener(this);
    }

    public void paint(Graphics g)
{
    System.out.println("paintComponent entered"); // checker
    super.paint(g);

    g.setColor(Color.BLACK);
    g.drawRect(x-50, y-50, 100, 100);
}

    private BufferedImage getFileOrDirectory()
    {
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.setFileSelectionMode (JFileChooser.FILES_AND_DIRECTORIES);

    if (fileChooser.showOpenDialog(panelPic) == JFileChooser.APPROVE_OPTION) 
    {
        try 
        {
            pic = ImageIO.read(fileChooser.getSelectedFile());
        } catch (IOException ioe) 
        {
            JOptionPane.showMessageDialog(panelPic, "Error Reading File!");
        }

        System.out.println("getFileOrDirectory exited");
    }

    else if (fileChooser.showOpenDialog(panelPic) == JFileChooser.CANCEL_OPTION)
        System.exit(1);
    return pic;
}

public void showImage()
{
    pic = getFileOrDirectory();
    picLabel = new JLabel (new ImageIcon(pic));
    panelPic.add(picLabel);
    repaint();
frame.validate();
}

 public static void main (String [] args)
{
    new TrialCode();
}

public void actionPerformed(ActionEvent event)
{
inputImage();
}

@Override
public void mouseClicked(MouseEvent e) 
{
// TODO Auto-generated method stub

     x = e.getX();
     y = e.getY();
     repaint();
     inputName = JOptionPane.showInputDialog(frame, "Enter Name");
     // when click the retangle should appear

}
...