一个面板上的MouseListener如何使用不同面板上的对象值?

时间:2016-12-16 20:27:03

标签: java button jpanel getter

我是一位经验丰富的开发人员,而不是JAVA或OOP。我被困在一个基本的java基础上。

我正在构建一个具有绘图区域(JPanel)的小应用程序,单击该绘图区域将在用户单击的面板上绘制彩色形状。要绘制的对象的形状和颜色由另一个面板上的无线电和组合按钮确定。

这是一个非常基本的基本方法吗?

我从一个JFrame开始,添加一个左右JPanel。左侧面板有一个mouselistener,右边有一个绘制形状所需的属性。

我能够让绘图部分工作,但只有内置硬编码的形状。

1 个答案:

答案 0 :(得分:0)

我建议在动作监听器构造函数方法中使用as参数来添加对所述对象的引用。

完整的运行示例:

package com.jms.app;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.*;

public class MainApp extends JFrame {

    JPanel mainPanel = new JPanel(new BorderLayout());
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    SomeListener listener = new SomeListener(panel2); //YOU WANT RIGHT PANEL TO DRAW

    public MainApp() {
        panel1.setBorder(BorderFactory.createLineBorder(Color.black));
        panel1.setPreferredSize(new Dimension(150, 150));
        panel1.addMouseListener(listener); //YOU WANT LEFT PANEL TO CAPTURE MOUSE EVENT
        panel2.setBorder(BorderFactory.createLineBorder(Color.black));
        panel2.setPreferredSize(new Dimension(150, 150));

        mainPanel.add(panel1, BorderLayout.WEST);
        mainPanel.add(panel2, BorderLayout.EAST);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(mainPanel);
        setSize(300, 150);
        setLocationRelativeTo(null);
    }

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

    class SomeListener extends MouseAdapter {
        private JPanel panel = null;

        public SomeListener(JPanel panel) {
            this.panel = panel;
        }

        public void mouseClicked(MouseEvent e) {
            System.out.println("Here is your referenced object." + panel.toString());
            //I'm lazy to draw for you.
        }
    } 
}