首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将最终vars传递给MouseListener方法并返回结果

问将最终vars传递给MouseListener方法并返回结果
EN

Stack Overflow用户
提问于 2014-01-20 01:55:51
回答 1查看 861关注 0票数 0

我正在挣扎于这段代码,我想点击由JPanel对象创建的网格中的一个单元格,并在该单元格中显示一个带有该单元格索引的标签。我创建了一个添加最终vars并返回带有该标签的JPanel的方法。这不管用。我该怎么做?

代码语言:javascript
复制
 public MyTest01(int width, int length) { //constructor

    frame.setLayout(new GridLayout(width, length)); //set layout
    JPanel temp = null;
    JLabel l;

    for (int y = 0; y < length; y++) {
        for (int x = 0; x < width; x++) {
            temp = new JPanel();
            temp.setBorder(new LineBorder(Color.black, 1));
            temp=doStuff(temp,x,y);
            frame.add(temp);
        }
    }

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack(); //sets appropriate size for frame
    frame.setVisible(true); //makes frame visible
}

public static JPanel doStuff( final JPanel temp,final int x, final int y) {

MouseListener mouseListener = new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent mouseEvent) {
       JLabel  l = new JLabel("("+x+" - "+y+")");
     temp.add(l);

    }
};
return temp;
}
EN

回答 1

Stack Overflow用户

发布于 2014-01-20 02:15:16

  1. 您从不将侦听器添加到JPanel中。
  2. 添加组件( revalidate,JLabel)后,需要对JPanel进行repaint和JPanel; MouseListener mouseListener =新的MouseAdapter() {@MouseAdapter(MouseEvent mouseEvent) { JLabel l=新JLabel("(“+x+”-“+y+ ")");temp.add(l);temp.revalidate();<-重新验证temp.repaint();<-重新油漆};temp.addMouseListener(mouseListener);<

这是工作代码

代码语言:javascript
复制
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.LineBorder;

public class MyTest {

    JFrame frame = new JFrame();

    public MyTest(int width, int length) { //constructor

        frame.setLayout(new GridLayout(width, length)); //set layout
        JPanel temp = null;
        JLabel l;

        for (int y = 0; y < length; y++) {
            for (int x = 0; x < width; x++) {
                temp = new JPanel();
                temp.setBorder(new LineBorder(Color.black, 1));
                temp = doStuff(temp, x, y);
                frame.add(temp);
            }
        }

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack(); //sets appropriate size for frame
        frame.setVisible(true); //makes frame visible
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                new MyTest(3, 3);
            }
        });
    }

    public static JPanel doStuff(final JPanel temp, final int x, final int y) {

        MouseListener mouseListener = new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent mouseEvent) {
                JLabel l = new JLabel("(" + x + " - " + y + ")");
                temp.add(l);
                temp.revalidate();;
                temp.repaint();
            }
        };
        temp.addMouseListener(mouseListener);
        return temp;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21225094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档