MouseAdapter가 첨부 된 단일 행 JTabel을 사용하고 있습니다. 테이블 모델은 임의의 값으로 채워집니다. 테이블을 마우스 오른쪽 버튼으로 클릭하면 여러 JMenuItem이있는 JPopupMenu가 나타납니다. 시각적 아티팩트는 팝업의 일부가 패널 외부에 그려져 있는지 여부를 보여주기 시작합니다. 흥미롭게도 이것은 팝업에 많은 항목이 첨부되어 있지 않은 경우에만 발생하는 것으로 보입니다. 7 개가 넘는 항목이있는 팝업은 지속적으로 작동합니다.작은 JPopupMenu가 시각적 인 인공물을 일으키는 반면 왜 큰 JPopupMenu는 시각적 인 인공물을 생성합니까?
Java 1.8.0_112-b15가 설치된 Windows 10 64 비트에서만 테스트되었습니다.
왜 이런 일이 발생하며 해결 방법이 있습니까?
public class PopupTest {
private static final int NUM_POPUP_ITEMS = 3;
private JFrame frame = new JFrame();
private JPanel panel = new JPanel();
private TableModel model = new TableModel();
private JTable table = new JTable();
public static void main(String[] a) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new PopupTest();
}
});
}
public PopupTest() {
panel.setLayout(new BorderLayout());
panel.add(table, BorderLayout.CENTER);
panel.setPreferredSize(new Dimension(400, 500));
table.setModel(model);
table.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent event) {
popup(event);
}
});
frame.setLocation(150, 150);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
private void popup(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e)) {
JPopupMenu menu = new JPopupMenu();
for (int i = 0; i < NUM_POPUP_ITEMS; i++) {
menu.add(new JMenuItem(String.valueOf(i)));
}
menu.show(panel, e.getX(), e.getY());
}
}
private class TableModel extends AbstractTableModel {
private List<Double> dataList = new ArrayList<>();
public TableModel() {
for (int i = 0; i < 40; i++) {
dataList.add(Math.random());
}
}
@Override
public int getRowCount() {
return dataList.size();
}
@Override
public int getColumnCount() {
return 1;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return dataList.get(rowIndex);
}
}
}
합니까를 scrollpane에 테이블을 넣는 데 차이가 있습니다 – MadProgrammer
아니요 내 orignal 코드에서 테이블이 JScrollPane에 추가되고 똑같은 방식으로 동작합니다 – Emiel
JDK 7/8,하지만 Windows 10에서 문제를 재현하지 못했습니다. 이것이 디스플레이 드라이버 문제일까요? 이뮤얼? –