我创建了一个JPanel[][]
数组。
private JPanel[][] pnlFeld;
用面板填充
for (int i = 0; i < world.getSize(); i++) {
for (int j = 0; j < world.getSize(); j++) {
pnlFeld[i][j] = new JPanel();
pnlFeld[i][j].setBorder(new EtchedBorder());
pnlFeld[i][j].addMouseListener(ml);
pnlFeld[i][j].setBackground(off);
add(pnlFeld[i][j]);
}
}
现在我想通过点击它们来获取数组坐标([][]
),我不知道如何做到这一点。
我只添加了更改我点击的面板颜色的方法,与我的问题无关。
MouseListener ml = new MouseListener() {
@Override
public void mouseEntered(MouseEvent e) {
if (world.getMode().equals("Malen")) {
if (e.getSource() instanceof JPanel)
e.getComponent().setBackground(on);
// check();
}
else if (world.getMode().equals("Radieren")) {
if (e.getSource() instanceof JPanel)
e.getComponent().setBackground(off);
// check();
}
}
@Override
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
if (world.getMode().equals("Setzen")) {
if (e.getSource() instanceof JPanel) {
if (e.getComponent().getBackground() == off) {
e.getComponent().setBackground(on);
} else
e.getComponent().setBackground(off);
}
// check();
}
}
}
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
};
答案 0 :(得分:1)
实际上,您可以使用getBounds()来获取组件的位置和大小。如果你的意思是数组索引可能有多个解决方案。
定义地图并将所有面板放在带字符串的地图中,例如i +“:”+ j(或定义简单的pojo类,包含2个字段i和j。
为每个JPanel创建唯一的侦听器以保留i和j。
使用GridBagLayout将面板放在包含器中,然后可以使用gridBagLayoutInstance.getConstraints(theClickedPanel)并检查约束的行列
答案 1 :(得分:1)
点击
获取> <?php > $getMenus = $db->next_record($db->query("SELECT COUNT(*) as total, product_menu_meals FROM product_menus WHERE 1")); > > $getMeals = (json_decode($getMenus['product_menu_meals'], true)); > > if(in_array($mainMeal['meal_id'], array_filter($getMeals['Monday'])) || > in_array($mainMeal['meal_id'], array_filter($getMeals['Tuesday'])) || > in_array($mainMeal['meal_id'], array_filter($getMeals['Wednesday'])) || > in_array($mainMeal['meal_id'], array_filter($getMeals['Thursday'])) || > in_array($mainMeal['meal_id'], array_filter($getMeals['Friday']))){echo $getMenus['total'];}; > ?> Menus
JPanel[][]
坐标
将JPanel
与JButton[][]
一起使用,以便更轻松地进行编码并获得更好的用户体验。 ActionListener
有ActionEvent
方法,可识别已激活的按钮。
这个chess GUI使用棋盘上64个位置的按钮。
答案 2 :(得分:0)
如果您在循环中创建MouseListener
,则可以在监听器的代码中使用i
en j
。缺点是你会有更多的监听器实例。
答案 3 :(得分:0)
我建议您在声明和初始化面板的循环中将每个JPanel
的名称设置为i
和j
。如图所示
pnlFeld[i][j].setName(i + "" + j);
在mouseClicked
事件中检查事件源是否为JPanel
的实例并解析名称以获取x和y坐标,如下所示:
Integer.parseInt(p.getName().subString(0,1))
Integer.parseInt(p.getName().subString(1));