Как нарисовать сетку, используя класс свинга Java и определить положение мыши при нажатии и перетаскивании
Я пытаюсь создать пользовательский интерфейс сетки (5 * 5), используя классы Swing. Я попробовал вложенный цикл и динамически добавил jPanel в jFrame. И я также попытался изменить цвет фона каждой jPanel, когда пользователь щелкает и перетаскивает ее. Но с моим кодом огромные промежутки между каждой ячейкой, и я могуполучить событие перетаскивания для работы.
public class clsCanvasPanel extends JPanel {
private static final int intRows = 5;
private static final int intCols = 5;
private List jpllist = new ArrayList();
public clsCanvasPanel() {
/*
*
* Add eventListener to individual JPanel within CanvasPanel
*
*
* TODO :
* 1) mousePressed --> update Temperature and HeatConstant of clsElement Class
* 2) start a new thread and
* 3) call clsElement.run() method
*
*
* Right Now : it updates the colours of the JPanel
* */
MouseListener mouseListener = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
JPanel panel = (JPanel) e.getSource();
Component[] components = panel.getComponents();
for (Component component : components) {
component.setVisible(!component.isVisible());
component.setBackground(new Color(255,255,0));
}
panel.revalidate();
panel.repaint();
}
};
//TODO : refactoring
GridLayout gdlyPlates = new GridLayout();
gdlyPlates.setColumns(intCols);
gdlyPlates.setRows(intRows);
gdlyPlates.setHgap(0);
gdlyPlates.setVgap(0);
setLayout(gdlyPlates);
//TODO : refactoring
for (int row = 0; row < intRows; row++) {
for (int col = 0; col < intCols; col++) {
JPanel panel = new JPanel(new GridBagLayout());
panel.setOpaque(false);
JPanel jl = new JPanel();
jl.setVisible(true);
panel.add(jl);
panel.addMouseListener(mouseListener);
jpllist.add(panel);
add(panel);
}
}
}
}
Поэтому сейчас я пытаюсь создать одну панель и нарисовать на ней сетку, затем определяю положение мыши на сетке, дополнительно меняю цвет каждой ячейки.
Может кто-нибудь дать мне несколько советов о том, как реализовать эту сетку на JPanel, и изменить цвет выбранной ячейки.