Jak narysować siatkę za pomocą Java klasy swing i wykryć pozycję myszy, gdy klikniesz i przeciągniesz
Usiłuję utworzyć siatkę interfejsu użytkownika (5 * 5) za pomocą klas Swing. Próbowałem pętli zagnieżdżonej i dynamicznie dodawałem jPanel do jFrame. Próbowałem też zmienić kolor tła każdego jPanelu, gdy użytkownik kliknie i spadnie na niego. Ale z moim kodem istnieją ogromne luki między każdą komórką i nie mogę uruchomić zdarzenia przeciągania.
public class clsCanvasPanel extends JPanel {
private static final int intRows = 5;
private static final int intCols = 5;
private List<JPanel> jpllist = new ArrayList<JPanel>();
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);
}
}
}
}
Teraz próbuję stworzyć jeden panel i narysować na nim siatki, a następnie wykrywam pozycję myszy na siatce, dalej zmieniam kolor każdej komórki.
Czy ktoś mógłby mi dać kilka wskazówek, jak zaimplementować tę siatkę na JPanel i zmienić kolor wybranej komórki.