【发布时间】:2022-12-31 21:55:27
【问题描述】:
我有一个 Jlist,它的模型类可能不同。而我想根据JList的模型类来采取行动。我试过这样的事情:
private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {
Object selectedObject = jList1.getModel().getClass();
switch (selectedObject) {
case ResponsePlayerSearch.class:
//do something with this class. for example run get player function from this class:
selectedObject.getPlayerName();
break;
case ResponseLeagueSearch.class:
//do something with this class
break;
case ResponseTeamSearch.class:
//do something with this class
break;
case ResponseCoachSearch.class:
//do something with this class
break;
default:
}
}
但是 ide 抛出一个错误:patterns in switch statements are a preview feature and are disabled by default. (use --enable-preview to enable patterns in switch statements)
我应该如何处理这样的情况?我应该使用开关盒还是其他东西?或者我应该如何使用 switch case 来处理不同的类?
编辑(提供更多细节):
基本上我正在做的是从 api 中搜索一些值。首先,用户必须选择一个类型(球队、球员、联赛或教练),根据这个类型他们可以搜索任何他们想要的词。例如,假设用户搜索了一个团队。然后程序进行调用并获得响应。然后此响应正在转换为模型。对于这种类型,这是 ResponseTeamSearch。之后 JList 的模型类根据这个模型发生变化。然后 JList 被响应的值填充。
顺便说一下,这是 Jlist 的创建代码:
jList1 = new javax.swing.JList();
jList1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTIO;
jList1.addListSelectionListener(new
javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent
evt)
{
jList1ValueChanged(evt);
}
});
jScrollPane1.setViewportView(jList1);
【问题讨论】:
-
这听起来像是一个 XY 问题,我想知道您的整个方法是否有误。一个猜测,你不会有一个单一的听众处理各种模型,并且可能会在让你交换模型的事件中交换听众,但至于具体答案,我打赌这需要更具体和详细的问题。
-
那么,请问您:您的程序关注点是否在模型视图安排中得到了很好的分离?如果不是,那么这可能是导致当前问题的根本因素。如果是这样,那么解决方案很可能在模型代码中找到,而不是在视图代码中。同样,除非您想要创建不当的外观修复(如当前答案),否则请提供更多与您的问题和代码相关的详细信息并显示更多代码,最好是 minimal reproducible example。
-
我刚刚编辑了问题。我当然可以提供更多细节。
-
我的猜测:您可能希望使用状态或命令设计模式来解决此问题,其中状态可以由枚举定义,并且状态更改将在用户选择类型时触发。
-
你能举个例子吗?我还添加了 Jlist1 的创建代码,如您所见,我在创建时没有使用类型参数。
标签: java swing switch-statement