2016-12-16 24 views
-1

我是一名经验丰富的开发人员,不在JAVA或OOP中。我被困在一个基本的Java基础上。一个面板上的MouseListener如何使用不同面板上的对象的值?

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

这将是一个非常基本的方法来做到这一点?

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

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

+0

握住属性为其中是负责绘制类字段。在按钮中选择项目时更改它们的值。 – user1803551

+0

这是不是Java类 - 供您参考 - 在大学注册 – gpasch

回答

0

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

的完整的运行示例:

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. 
     } 
    } 
}