Я хочу добавить MouseListener в класс, который расширяет JPanel. Listener ссылается на другой класс, в котором сам JPanel создается и добавляется в contentPane. Нажав мышь на JPanel, ее следует удалить. Он работает хорошо, но я не могу назвать repaint(), потому что мой удаляющий метод является статическим. Как я могу это решить?Добавить MouseListener со ссылкой на другой класс
Это расширенный класс:
public class PanelDraggable extends JPanel {
public PanelDraggable() {
.
.
.
MouseInputAdapter closeMouseAdapter = new CloseMouseHandler();
addMouseListener(closeMouseAdapter);
}
private class CloseMouseHandler extends MouseInputAdapter {
public void mouseClicked(MouseEvent e) {
TblManagement.RemoveTable();
}
}
}
И в этом классе я хочу создать панель и удалить его:
public void AddTables() {
String dbShortName = combo.getSelectedItem().toString();
String dbName = prop.get(dbNamesFile, dbShortName);
int x = 50; int y = 150; int width = 150; int height = 220; //set Size and location
int [] indices = tblList.getSelectedIndices();
panel = new PanelDraggable [indices.length];
for (int i = 0; i < indices.length ; i++) {
String tblName = tblList.getModel().getElementAt(i).toString();
String sql = "SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE "+
"`TABLE_SCHEMA`='"+dbName+"' AND `TABLE_NAME`='"+tblName+"'";
JList<?> columnslist = new JList<String>();
columnslist.setModel(getListModel(dbName, sql, 1));
JScrollPane sc = new JScrollPane(columnslist);
panel[i] = new PanelDraggable(x, y , width, height, tblName, sc);
MouseInputAdapter mousehandler = new TableMouseHandler();
panel[i].addMouseListener(mousehandler);
mainPanel.add(panel[i]);
x+=15;
y+=20;
}
revalidate();
repaint();
}
private class TableMouseHandler extends MouseInputAdapter {
public void mouseEntered(MouseEvent e) {
removeComp = (JComponent) e.getComponent();
}
}
public static void RemoveTable() {
mainPanel.remove(removeComp);
}
Спасибо за помощь.
Трудно думать о том, как это сделать, потому что это не должно быть сделано. Статическая функция не должна напрямую изменять объект. Вы можете передать аргумент mainPanel и removeComp в RemoveTable, чтобы обойти это. – JDrost1818
Если я не должен делать так, каковы другие возможности? – coo12
Я скоро отправлю официальное сообщение. – JDrost1818