【问题标题】:Need help adding MouseListener to 2d array of JPanels需要帮助将 MouseListener 添加到 JPanel 的二维数组
【发布时间】:2015-01-22 22:14:10
【问题描述】:

所以我正在开发一款游戏,其细节并不重要,但我使用的是由 11x11 2d 阵列的 JPanel 制成的棋盘,然后将 JLabels 用作“棋子”。我想在面板中添加一个 MouseListener,例如:单击面板 [10] [5] 时;面板[10][5].add(redCircle)。我的问题只是缺乏关于鼠标监听器的语法和使用的知识,因为我的老师教的不多,而且我在学习在线示例时遇到了一些麻烦。我只需要创建和实现此类侦听器的一般帮助,关于我的代码的任何其他意见都受到高度重视,因为这是我的第一个真正的程序,我不太擅长。

这是我现在拥有的:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.BevelBorder;
public class GameFrame extends JFrame
{ 
    private JPanel[][] panels = new JPanel[11][11];
    private JPanel tilePanel;
    private JLabel blackSquare;
    private JLabel blackCircle;
    private JLabel blackTriangle;
    private JLabel redSquare;
    private JLabel redCircle;
    private JLabel redTriangle;
    private int sideLength;

public GameFrame()
{
    setSize(1000,750);
    setResizable(false);
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    setLocationRelativeTo(null);

    sideLength = 11;

    tilePanel = new JPanel();
    tilePanel.setLayout(new GridLayout(sideLength,sideLength));

    Color darkBlue = new Color(31,62,148);
    Color darkGray = new Color(107,107,107);

    for (int i = 0; i < 11; i++)
    {           
        for (int j = 0; j < 11; j++)
         {                 
             panels[i][j] = new JPanel();
             if (i%2 == j%2)
             {
                 panels[i][j].setBackground(darkGray);   
             }
             else
             {
                 panels[i][j].setBackground(darkBlue);
             } 
             panels[i][j].setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
             tilePanel.add(panels[i][j]);
         }           
    }        

    blackTriangle = new JLabel(new ImageIcon("blackTriangleUp.fw.png"));
    blackSquare = new JLabel(new ImageIcon("blackSquare.fw.png"));
    blackCircle = new JLabel(new ImageIcon("blackCircle.fw.png"));
    redTriangle = new JLabel(new ImageIcon("redTriangleUp.fw.png"));
    redSquare = new JLabel(new ImageIcon("redSquare.fw.png"));
    redCircle = new JLabel(new ImageIcon("redCircle.fw.png"));

    panels[0][0].add(blackTriangle);
    panels[1][1].add(blackSquare);
    panels[2][2].add(blackCircle);
    panels[3][3].add(redTriangle);
    panels[4][4].add(redSquare);
    panels[5][5].add(redCircle);

    add(tilePanel);
    setVisible(true);

【问题讨论】:

  • "My issue is just a lack of knowledge about the syntax and use of mouselisteners in general, as my teacher doesn't teach much and I've been having a bit of trouble following online examples." -- 您当前的代码未显示您的第一次最佳尝试。为了获得最佳帮助,您应该从这些教程开始,至少先尝试实现 MouseListener,然后如果它不起作用,请向我们展示您的尝试。你也没有提到什么让你感到困惑。
  • 例如,您可以在创建它们的 for 循环中将 MouseListener 添加到 JPanel 中......为什么不试试看会发生什么,......你绝对没有什么可失去的并在尝试中获益。
  • 这将是我的问题,我不知道如何将 MouseListener 添加到 JPanel。
  • "我不知道怎么给 JPanel 添加 MouseListener" - 那我建议你从How to Write a Mouse Listener开始
  • 你需要继续前进的关键技能之一是愿意至少尝试一些事情,任何事情。如果你不能做到这一点,你就会沉没。

标签: java arrays swing jframe mouselistener


【解决方案1】:

我建议在说您不知道如何做某事之前先学习如何使用搜索引擎。编程的一部分是学习如何解决问题。但这里有一个关于如何开始向面板添加鼠标侦听器的想法。

panels[i][j].addMouseListener(new MouseAdapter() { 
      public void mousePressed(MouseEvent me) { 
        System.out.println(me); 
      } 
    }); 

【讨论】:

    猜你喜欢
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2012-01-26
    • 2015-09-25
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多