0

JPanelボタンをクリックしたときに に画像をペイントしようとしていますが、paintComponentと と混同していmouselistenerます。

これは私がこれまでに行ったコードです。

public class Efi {

    public JFrame frame;
    public JButton button;
    private JPanel panel;
    private JPanel panel1 = new JPanel(new FlowLayout());
    private JPanel panel2 = new JPanel(new FlowLayout());
    private Image sex = new ImageIcon("img.jpg").getImage();

    public Efi() {
        frame = new JFrame("EFI'S APPLICATION");
        frame.setLayout(null);
        button = new JButton("IMAGE");
        button.setLocation(0, 0);
        button.setSize(500, 50);
        frame.add(button);
        button.addMouseListener(ML);

        panel = new JPanel(null);
        panel.setSize(400, 400);
        panel.setLocation(50, 50);
        panel.setVisible(true);
        panel.setLayout(null);
        panel.setBorder(BorderFactory.createLineBorder(Color.black, 2));
        frame.add(panel);
   }
   // super.paintComponent(g);
   MouseListener ML = new MouseListener() {

        @Override
        public void mouseClicked(MouseEvent e) {

        }

        @Override
        public void mousePressed(MouseEvent e) {
        }

        @Override
        public void mouseReleased(MouseEvent e) {
        }

        @Override
        public void mouseEntered(MouseEvent e) {
        }

        @Override
        public void mouseExited(MouseEvent e) {
        }
    };
  }
4

3 に答える 3

2

MouseListener検出したいのは がクリックされたときだけなので、は必要ありません。JButtonしたがって、 を使用できますActionListener。の目的は、押された解放されたなど、にMouseListener発生するさまざまなイベントを処理することです。詳細については、こちらを参照してください。また、メカニズムの詳細については、こちらを参照してください。JComponentpaintComponent

時間をかけて実装しました。

public class Efi extends JFrame {

    public JButton button;

    public Efi() {
        super("EFI'S APPLICATION"); //or you can omit this and use setTitle();
        setLayout(new BorderLayout());
        setSize(250,300);


        button = new JButton("IMAGE");
        add(button, BorderLayout.SOUTH);
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                ImagePanel imagePanel = new ImagePanel();

                //JFrames methods
                add(imagePanel, BorderLayout.CENTER);
                revalidate();
                repaint();
            }
        });

        //Added those
        setLocationRelativeTo(null); //This is for centering the frame to your screen.
        setDefaultCloseOperation(EXIT_ON_CLOSE); //This for closing your application after you closing the window.

    }

    public class ImagePanel extends JPanel {

        private BufferedImage image;

        public ImagePanel() {
            try {
                image = ImageIO.read(new File("img.jpg"));
            } catch (IOException ex) {
                ex.printStackTrace();
            }

            setBorder(BorderFactory.createLineBorder(Color.black, 2));
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, null);
        }
    }

    public static void main(String args[]) {
        new Efi().setVisible(true);
    }
}

ここに画像の説明を入力 ここに画像の説明を入力

于 2013-06-07T18:29:59.680 に答える