みなさん、良い一日を!いくつか質問があります: JList のメソッドをオーバーライドするにはどうすればよいですか。Point の配列があり、サーバー側とクライアント側の間を歩くのが好きなので、Point の toString() をオーバーライドすることはできません。そして、私のロジックは、JListまたはDefaultListModelでそれを実行できることを教えてくれますが、情報を見つけることができません(おそらく、それをグーグルで検索する方法がわかりません)。だから多分誰かがそれを行う方法を知っていますか?
Ps 私の英語と文法について申し訳ありません。
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());
}
}
}
私の答え: (新しいクラスを作成したくないので、これはコードが少ないため)
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;
}
};
}
}