当前位置: 首页 > 知识库问答 >
问题:

为什么JComboBox在鼠标悬停时触发toString()?

应煌
2023-03-14

我创建了一个简单的GUI,一个JComboBox和JButton。JButton用testString类的对象填充JComboBox。当鼠标悬停在JComboBox上时,它几乎触发了testString类的toString()25次。为什么会这样?我们怎样才能阻止它?

以下是代码:

import javax.swing.DefaultComboBoxModel;

public class _NewJFrame extends javax.swing.JFrame {

public _NewJFrame() {
    initComponents();
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    
    Object[] args = {new testString("ABC") , new testString("EDF") , "GIH", "IJK"}; 
    jComboBox1.setModel(new DefaultComboBoxModel(args ));
}                                        
public static void main(String args[]) {
        

            new _NewJFrame().setVisible(true);
            
             
}

private javax.swing.JButton jButton1;
private javax.swing.JComboBox<String> jComboBox1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
}



class testString {
String text; 
static int i; 
testString(String text){ this.text = text; }; 


public String toString(){
    System.out.println("ToSting() Called on Text " + text + " "+ ++i);

    return text; 
}


}

图形用户界面输出

共有1个答案

薛俊美
2023-03-14

您无法阻止JComboBox调用项目的toString()方法。

这是因为JComboBox需要知道它必须向用户显示什么文本。

为此,它调用项的toString()方法(鼠标悬停在当前显示的项,下拉列表中显示的所有项)。

好的,您可以通过提供一个定制的呈现器来停止它——一个实现javax的类。摆动ListCellRenderer接口。

在项目上有效调用toString()方法的默认ListCellRenader。如果您提供自定义的ListCellRenader实现,它可以调用您喜欢的任何其他方法。

但是,对ListCellRenderer的调用应该尽可能多。GetListCellRenderComponent()方法,正如您看到的对项的调用toString()方法一样。

 类似资料:
  • 问题内容: libgdx中是否有任何侦听器可以让我检测到鼠标悬停而不是鼠标悬停。在场景2D的按钮类中,您有2种方法isOver和isPressed,但是它们执行相同的操作…还有其他问题吗?还有另一种方法来检测鼠标悬停在actor上吗? 问题答案: 还有的可以连接到和它提供的事件,如下面的: 该事件从根本上来说意味着鼠标开始悬停在角色上,意味着它“离开”了角色的区域。它还有一个事件,您可以使用该事件

  • 问题内容: 有时,我可以选择使用CSS元素:悬停或JavaScript onmouseover来控制页面上html元素的外观。考虑以下情况,其中div包装了输入 我希望输入将鼠标光标悬停在div上时更改背景色。CSS方法是 JavaScript方法是 每种方法的优点和缺点是什么?CSS方法是否适用于大多数Web浏览器?JavaScript比CSS慢吗? 问题答案: :hover的问题是IE6仅在链

  • 问题内容: 我的代码中有一个。我已添加。但是它还是没有被触发。我已经尝试了很多时间,但是没有找到解决方案。 但是控制台中没有任何内容。请建议我我在做什么错。 问题答案: FocusListener不是JComboBox的适当监听器,另外一个监听器可以创建无限循环(尤其是可编辑的JComboBox), 的FocusListener是异步的,有时是太难捕捉事件是正确的订单特别是在案件JComponen

  • 问题内容: 全屏是提供全屏框架的另一类。JButton上面有ImageIcon。bg1.png是背景图像 问题 是这些JButton仅在鼠标悬停时才可见,否则它们不出现。 问题答案: 您可能会遇到布局问题,在该问题中,您尝试将具有绝对界限的JButton添加到使用非null布局管理器的容器中。意见建议 不要使用setBounds和绝对定位来调整和放置组件。 阅读并使用布局管理器为您完成繁重的工作:

  • 我有一个应用程序,我想在

  • 我有一系列使用d3创建的行。我写了一些和事件事件。 当I时,事件通过增加行的值正常工作。 但是在上,在我编写代码的地方,事件不能正常工作,将值设置为初始值。 小提琴 帮我修一下。