[英]java - highlighting only one field
我想使我的代碼突出顯示我單擊的正方形(此方法有效)。 我不知道該怎么做,當您單擊另一個先前死掉的方塊並點亮一個新的方塊時。 如何改善mouseClicked的方法?
public class App
{
public static void main(String[] args)
{
new App();
}
App()
{
JFrame jFrame = new JFrame("Mouse Hover Demo");
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jFrame.setLayout(new GridLayout(5,5));
for(int i=0;i<25;i++)
{
jFrame.add(new CustomPanel(i));
}
jFrame.pack();
jFrame.setLocationRelativeTo(null);
jFrame.setVisible(true);
}
class CustomPanel extends JPanel implements MouseListener
{
/**
*
*/
boolean isHighlighted;
int postion;
int tab[];
private static final long serialVersionUID = 1L;
Border blackBorder = BorderFactory.createLineBorder(Color.BLACK);
CustomPanel(int postion)
{
this.postion = postion;
addMouseListener(this);
setBorder(blackBorder);
setFocusable(true);
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(50, 50);
}
@Override public void mouseClicked(MouseEvent e)
{
System.out.println(this.postion);
setBackground(Color.black);
}
@Override public void mousePressed(MouseEvent e){}
@Override public void mouseReleased(MouseEvent e){}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
}
例如,在App類中,您可以具有作為CustomPanels表的字段( private CustomPanel[] myCustomPanels
以及另一個字段-整數private int highlightedOne = -1
,它將指向突出顯示的元素的索引。
然后在方法mouseClicked
您可以執行以下操作:
@Override public void mouseClicked(MouseEvent e)
{
System.out.println(this.postion);
if (highlightedOne != -1)
myCustomPanels[highlightedOne].setBackground(Color.white);
highlightedOne = this.position;
setBackground(Color.black);
}
欄目部分:
public class App
{
private CustomPanel[] myCustomPanels = new CustomPanel[25];
private int highlightedOne = -1;
public static void main(String[] args)
{
new App();
}
App()
{
JFrame jFrame = new JFrame("Mouse Hover Demo");
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jFrame.setLayout(new GridLayout(5,5));
for(int i=0;i<25;i++)
{
CustomPanel toAdd = new CustomPanel(i);
myCustomPanels[i] = toAdd;
jFrame.add(toAdd);
}
jFrame.pack();
jFrame.setLocationRelativeTo(null);
jFrame.setVisible(true);
}
...
或者,您可以使用列表而不是表-您不需要在開始時將大小傳遞給它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.