如何在Java中一次使JPanel变量可用于多个功能?

我想完成的事情

我想用Java制作像素艺术制作者,我制作了一个网格,用于监听鼠标的点击。当我单击网格单元格时,该单元格应变成粉红色。

我正在使用private JPanel selectedPanel = null;将选定的单元格分配给它。所以基本上是这样的: if(mouse clicked on cell) { set cell to selectedPanel }唯一的问题是,如果我选择另一个单元格,则不再选择上一个单元格(这会引起问题,我将在稍后进行解释)。

因此,例如,如果要制作它,以便您必须右键单击以删除颜色,则必须重新单击上一个单元以使其可移动(因为我这样做是为了您只能删除所选单元格上的颜色。)

我考虑过要制作一个选定的单元格阵列,然后如果您选择去除颜色,则要去除阵列中的单元格。我没有尝试过,因为:

  • 我对Java来说太新了,无法理解所有这些
  • 我不确定这是最有效的方法
  • 我想使其成为避免将来出现常见问题的最佳方法

非常感谢任何帮助!!预先感谢!

这是我的代码:

  private static final int ROW_COUNT = 10;
  private static final int W = 60;
  private static final int H = W;
  private static final Dimension PREF_SIZE = new Dimension(W,H);
  protected static final Color SELECTION_COLOR = Color.pink;
  private JPanel selectedPanel = null;
  private Color originalColor = null;
  public Main() {
    setLayout(new GridLayout(ROW_COUNT,ROW_COUNT,1,1));
    setBackground(Color.black);
    for (int i = 0; i < ROW_COUNT * ROW_COUNT; i++) {
      JPanel panel = new JPanel();
      String name = String.format("[%d,%d]",i / ROW_COUNT,i % ROW_COUNT);
      panel.setName(name);
      if (i == 0) {
        originalColor = panel.getBackground();
      }
        panel.setPreferredSize(PREF_SIZE);
        add(panel);
      }
      addmouseListener(new MouseAdapter() {
        public void MapCalculations(MouseEvent e) {
          // If left mouse button is clicked
          if (SwingUtilities.isLeftMouseButton(e)) {
              System.out.println("Left");
              JPanel panel = (JPanel) getcomponentAt(e.getPoint());
              if (panel == null || panel == Main.this) {
                return;
              }
              selectedPanel = panel;
              selectedPanel.setBackground(SELECTION_COLOR);
              selectedPanel.add(new JLabel(selectedPanel.getName()));
              selectedPanel.revalidate();
              selectedPanel.repaint();
          }

          if (SwingUtilities.isRightMouseButton(e)) {
              System.out.println("Right");
              selectedPanel.setBackground(originalColor);
              selectedPanel.removeAll();
              selectedPanel.revalidate();
              selectedPanel.repaint();
          }
        }

        @Override
        public void mousepressed(MouseEvent e) {
          MapCalculations(e);
        }
        public void mouseDragged(MouseEvent e) {
          MapCalculations(e);
        }

     });
   }
heishashengzhe1 回答:如何在Java中一次使JPanel变量可用于多个功能?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2924825.html

大家都在问