모두 좋은 하루! 몇 가지 질문이 있습니다 : 어떻게 내 JList의 메서드를 재정의 할 수 있고, Point의 배열을 가지고 있으며, 서버와 클라이언트 사이를 걷는 것이 좋아서 Point의 toString()을 재정의 할 수 없습니다. 내 논리는 내 JList 또는 DefaultListModel에서이를 수행 할 수 있다고 말하지만 정보를 찾을 수는 없습니다 (아마 Google에서 그 방법을 모르겠습니다). 그래서 어쩌면 아무도 어떻게 알 수 있을까요?JList가 올바른 표시를 위해 셀의 toString을 대체합니다.
p.s. 나의 영어와 문법에 대해 유감스럽게 생각한다.
public class PointsList extends JPanel {
private Extra extra;
private JList<Point> pointsList;
private DefaultListModel<Point> listModel;
public PointsList(Extra extra) {
this.extra = extra;
setBackground(Settings.pointListBackround);
listModel = new DefaultListModel<Point>();
pointsList = new JList<Point>(
//Which method i must override, to change cell toString
};
pointsList.getSelectionModel().addListSelectionListener(getSelectionListAction());
setLayout(new BorderLayout());
add(pointsList);
setPreferredSize(new Dimension(150, 100));
}
private ListSelectionListener getSelectionListAction() {
return new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) {
extra.setSelectedPoint(pointsList.getSelectedValue());
extra.repaintCanvas();
}
}
};
}
public void updateList() {
listModel.removeAllElements();
for (Map.Entry<Point, Boolean> currentPoint : extra.getPoints().entrySet()) {
listModel.addElement(currentPoint.getKey());
}
}
}
내 대답 : 난 그냥 포인트의 toString을 재정의 할 수 없습니다
public class PointsList extends JPanel {
private Extra extra;
private JList<Point> pointsList;
private DefaultListModel<Point> listModel;
public PointsList(Extra extra) {
this.extra = extra;
setBackground(Settings.pointListBackround);
listModel = new DefaultListModel<Point>();
pointsList = new JList<Point>(listModel);
pointsList.setCellRenderer(getRender());
pointsList.getSelectionModel().addListSelectionListener(getSelectionListAction());
setLayout(new BorderLayout());
add(pointsList);
setPreferredSize(new Dimension(150, 100));
}
private ListSelectionListener getSelectionListAction() {
return new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) {
extra.setSelectedPoint(pointsList.getSelectedValue());
extra.repaintCanvas();
}
}
};
}
public void updateList() {
listModel.removeAllElements();
for (Map.Entry<Point, Boolean> currentPoint : extra.getPoints().entrySet()) {
listModel.addElement(currentPoint.getKey());
}
}
private ListCellRenderer<Point> getRender() {
return new ListCellRenderer<Point>() {
@Override
public Component getListCellRendererComponent(JList<? extends Point> list, Point value, int index, boolean isSelected, boolean cellHasFocus) {
JLabel cell = new JLabel("(" + value.x + " , " + value.y + ")");
cell.setForeground(Color.black);
return cell;
}
};
}
}