有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是否有方法提取单击的JPanel?

我正在尝试打印使用mouseEvent单击了JPanel数组中的哪个JPanel。我该怎么做

这给了我一个错误:

Local variable i defined in an enclosing scope must be final or effectively final

for(int i=0; i<count[0]; i++) {
    p1[i] = new JPanel();
    l1[lcount] = new JLabel("Panel "+(i+1));
    p1[i].add(l1[lcount]);
    panel_2.add(p1[i]);
    lcount++;
    p1[i].addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            System.out.println(i);
        }
    });
}

我想提取i的值并在另一个JLabel中显示它


共 (1) 个答案

  1. # 1 楼答案

    您可以从mouseEvent()使用e.getSource()。就投给杰帕内尔吧

    这里有一个例子

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class MouseEventSource {
       JFrame frame = new JFrame();
    
       public static void main(String[] args) {
          new MouseEventSource().start();
       }
    
       public void start() {
          JPanel p1 = createPanel("Panel 1", Color.BLUE);
          JPanel p2 = createPanel("Panel 2", Color.RED);
          MyMouseListener ml = new MyMouseListener();
          p1.addMouseListener(ml);
          p2.addMouseListener(ml);
          frame.setLayout(new FlowLayout());
          frame.add(p1);
          frame.add(p2);
          frame.pack();
          frame.setLocationRelativeTo(null);
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setVisible(true);
       }
    
       public JPanel createPanel(String name, Color color) {
          JPanel panel = new JPanel() {
             public String toString() {
                return name;
             }
          };
          panel.setBackground(color);
          panel.setPreferredSize(new Dimension(250, 250));
          return panel;
       }
    
       private class MyMouseListener extends MouseAdapter {
          public void mouseClicked(MouseEvent e) {
             // not really necessary to print toString()
             JPanel panel = (JPanel) e.getSource();
             System.out.println(panel);
          }
       }
    }