- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在分层情况下遇到 getcomponentat 问题。我进行了很多研究,发现以下线程实际上是我需要的,但它对我不起作用。我在线程中下载了代码并且它可以工作但是当我在我的项目中实现它时它没有。我可能正在做一些我无法指责的非常愚蠢的错误。
我有一个 JFrame,它有一个基本面板。我添加了一个 gridPanel(它在其上扩展了 JPanel 并实现了 mouselistner。在网格面板上我添加了单元格(它扩展了 JPanel 并且还实现了 mouselistener)。当我单击任何单元格时,我想知道该单元格在网格,但一切都返回为 0,0。
就这样吧。
MAINCLASS
mainFrame = new JFrame("Connect-4");
basePanel = new JPanel();
gridPanel = new Grid(); //Grid extends JPanel
//GRIDCLASS
public class Grid extends JPanel implements MouseListener {
public Grid(){
// setPreferredSize(new Dimension(600,700));;
setLayout(new GridLayout(6, 7));
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 7; j++) {
Cell tempCell = new Cell(i,j); //Cell Exntends JPANEL
tempCell.addMouseListener(this);
gridUI[i][j] = tempCell;
gridTrack[i][j] = 0;
add(tempCell);
int index = i*6 + j;
cellArray.add(tempCell);
}
}
addMouseListener(this);
}
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("Grid Click");
Cell clickedCell;
Boolean filled = false;
Point mousePoint;
mousePoint = e.getPoint();
System.out.println(mousePoint.x + "||" + mousePoint.y);
clickedCell = (Cell)getComponentAt(mousePoint);
// Point mousePoint = MouseInfo.
int cellIndex;
cellIndex = Integer.parseInt(clickedCell.getName());
int cellX = cellIndex / 7;
int cellY = cellIndex % 7;
}
public class Cell extends JPanel implements MouseListener{
private String status;
private Color curColor;
private Boolean occupied;
public static Boolean gameOver = false;
public static int player;
public static boolean randPlayer = false;
private Color player1 = Color.BLUE;
private Color player2 = Color.RED;
private static int[][] gridTrack = new int[6][7];
public int row,column;
public static int cellSize = 80;
public Cell(int row_in, int column_in){
setPreferredSize(new Dimension(cellSize,cellSize));
setBorder(BorderFactory.createLineBorder(Color.BLACK, 3));
setBackground(Color.GRAY);
player = 0;
this.setName(Integer.toString(row_in*6+column_in));
curColor = Color.WHITE;
addMouseListener(this);
occupied = false;
player = 1;
row = row_in;
column = column_in;
gridTrack[row][column] = 0;
}
最佳答案
当触发监听器时,事件点相对于触发事件的组件。将 MouseListener
添加到 Cell
会导致坐标相对于该 Cell
- 因此使用 getComponentAt
具有这些坐标的父 Component
将始终返回 0,0 处的 Cell
,因为事件点的坐标永远不会大于 Cell 的宽度/高度.
考虑使用单个 监听器来处理行为,使用适当的技术获取触发事件的组件:
JPanel
添加一个监听器 - 事件的坐标是相对于父级的。因此,使用 getComponentAt
将返回发生 MouseEvent
的组件Cell
添加一个监听器,并使用 Cell cell = (Cell)e.getSource()
获取触发事件的 Cell
>。 关于java - GetComponentAt Trouble 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30127150/
我正在使用 JFrame 设置纸牌游戏,使用扩展 JLabel 的卡片,以便它们可以在屏幕上拖动。然而,我的一个要求是我能够双击一张牌,它会弹到 4 叠 A。这不是问题。引起问题的是我将它设置在一个数
我在分层情况下遇到 getcomponentat 问题。我进行了很多研究,发现以下线程实际上是我需要的,但它对我不起作用。我在线程中下载了代码并且它可以工作但是当我在我的项目中实现它时它没有。我可能正
我正在尝试将选项卡 Pane 中的表数据导出到 Excel 文件中,但遇到此异常 javax.swing.JTable$1 cannot be cast to javax.swing.table.De
当我尝试在其他选项卡之间插入选项卡时,我遇到了 JTabbedPane 的奇怪问题。 UI 按预期呈现,但 getComponentAt() 返回错误的组件。 在我的应用程序中,用户应该能够按照他想要
我是一名优秀的程序员,十分优秀!