【问题标题】:Java JList How To Handle Different Model Classes?Java JList 如何处理不同的模型类?
【发布时间】: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


【解决方案1】:

我不认为这可以用 switch 语句执行,我们需要使用 if else 和 instanceof,下面是一个示例

   if (selectedObject instanceof ResponsePlayerSearch) {
   // doSomething 
   } else if (selectedObject instanceof ResponseLeagueSearch) {
   // something else 
   }

【讨论】:

  • 这看起来只是一个表面上的变化,对原始发帖人来说并没有太大改善。我猜想在发布合适的答案之前我们仍然需要更多信息。
猜你喜欢
  • 2011-02-22
  • 2018-02-17
  • 2022-01-19
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
相关资源
最近更新 更多