내 메인 클래스는 JTable
을 포함한 그래픽 구성 요소가 포함 된 창입니다.JTable + JPopupMenu + ActionListener = Nightmare
나는 JPopupMenu
의 사용자 지정 구현이며 JMenuItem
을 여러 개 포함하는 공용 클래스 ContextMenu
을 만들었습니다.
JTable
에 mouseListener를 등록하여 마우스 오른쪽 버튼을 클릭했을 때 ContextMenu
의 인스턴스를 표시했습니다.
문제는 다음과 같습니다. "선택한 행을 선택한 함수를 다른 행으로 전달하는 방법은 JMenuItem
입니까?"
확실한 대답은 내 JMenuItem
에 ActionListener를 설정하는 것이지만 JTable
은 JPopupMenu
과 다른 클래스/객체에 있다는 것을 기억하십시오.
일부 코드 스 니펫은 수천 단어에 해당합니다.
public class Tab implements ITab {
private ContextMenu contextMenu;
private JTable table;
private List<SomeObject> toProcess;
--- code --
private JScrollPane drawScrollTable() {
Object columns[] = {
"something",
"somethingElse"
};
Object rows[][] = {};
table = new JTable(new DefaultTableModel(rows, columns));
JScrollPane scrollPane = new JScrollPane(table);
table.setSelectionForeground(Color.BLACK);
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
int selectedRow = table.rowAtPoint(e.getPoint());
if (selectedRow >= 0 && selectedRow < table.getRowCount()) {
if (!table.getSelectionModel().isSelectedIndex(selectedRow)) {
table.setRowSelectionInterval(selectedRow, selectedRow);
}
}
if (e.isPopupTrigger() && e.getComponent() instanceof JTable) {
this.show(e);
}
}
private void show(MouseEvent e){
contextMenu.show(e.getComponent(), e.getX(), e.getY());
}
});
return scrollPane;
}
-- code --
}
public class ContextMenu extends JPopupMenu {
JMenuItem item;
public ContextMenu(IBurpExtenderCallbacks callbacks){
this.item= new JMenuItem("item");
this.item(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Do action involving the selected row, even better if possible action involving the value hold in the column 0 of the selected row and the toProcess private field
}
});
add(item);
}
}
내가 물어 보는 것이 가능한지 나는 모른다.
코드 조각을 게시보다 훨씬 더 나은 - 생성하고 유효한 [mcve]을 게시, 즉 정확한 우리를 위해 * 문제를 당신의 *을 보여줍니다 ** 작은 ** 컴파일 가능한 및 실행 가능한 프로그램입니다. 이렇게하면 괜찮은 대답을 얻을 확률이 크게 높아집니다. 모든 코드와 의사 소통은 링크가 아니라 원래의 질문에서 이뤄져야합니다. –