2016-12-16 4 views
-1

私は経験豊富な開発者です.JAVAやOOPではありません。私は基本的なJavaの基本に立ち往生しています。1つのパネル上のMouseListenerは、異なるパネル上のオブジェクトの値をどのように使用できますか?

クリックすると、ユーザーがクリックしたパネルに色の付いた図形が描画される描画領域(JPanel)を持つ小さなアプリケーションを構築しています。描画されるオブジェクトの形状と色は、別のパネルのラジオボタンとコンボボタンで決まります。

これを行うための基本的な基本的な方法は何でしょうか?

私はJFrameから始めて、左右のJPanelを追加します。左側のパネルにはマウスがあり、右側には図形を描くのに必要な属性があります。

ドローイング部分は動作させることができましたが、ハードコーディングされたシェイプのみが組み込まれていました。

+0

は、描画のために責任があるクラスのフィールドなどの属性を持ちます。ボタンで項目が選択されたときに値を変更します。 – user1803551

+0

これはJavaクラスではありません - あなたの情報のために - Collegeでサインアップする – 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. 
     } 
    } 
} 
関連する問題