したがって、基本的には、ビューにインターフェイスを実装し、ビューをカスタム イベントのソースとして渡します。3 つの「instanceof」呼び出しのいずれかで、false が返されます。
意見:
public class NamedOffensiveStatsView extends BagVectorPanel implements INamedOffensiveStatsView {
Event.toString():
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(this.getSource().getClass() + ": ");
e.toString() は以下を出力します:
class pl.drag0nius.diablo3.DPSCalc.NamedOffensiveStats.NamedOffensiveStatsView$2
false を返す instanceof:
@Override
public void eventFired(Event e) {
logger.debug("eventFired: " + e.toString());
if (e.getSource() instanceof INamedOffensiveStatsView) {
また、ビューからそのインターフェイスにキャストできません。
答え:
私の友人の助けを借りて、問題を発見しました。
イベントを呼び出すコード (ビューの initComponents() 内):
jComboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (comboBoxReady) {
logger.debug("actionPerformed");
listener.eventFired(new Event(this, "selection", jComboBox.getSelectedIndex()));
}
}
});
あるべき姿:
jComboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (comboBoxReady) {
logger.debug("actionPerformed");
listener.eventFired(new Event(NamedOffensiveStatsView.this, "selection", jComboBox.getSelectedIndex()));
}
}
});
「これ」は、ビューではなく、ネストされたクラスを参照していました。