2016-12-16 29 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. 
     } 
    } 
}