【问题标题】:Selected item in combobox will notadd to textfield?组合框中的选定项目不会添加到文本字段?
【发布时间】:2013-04-30 09:45:28
【问题描述】:

我有以下代码,但我不断收到错误。

void 是变量 itemStateChanged 的​​无效类型 这是错误消息,但是当我取出 void 时,我得到语法错误。

任何人都可以修复代码。

final JComboBox combobox = new JComboBox(procedurelist);
combobox.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        procedure = (String) combobox.getSelectedItem();

        private void itemStateChanged(ItemEvent e) {
            if(e.getStateChange() == ItemEvent.SELECTED) {
                if("Focus".equals(e.getItem())) {
                    textField_9.requestFocus();
                }
            }
        }
    }

});
combobox.setBounds(68, 216, 86, 20);
contentPane.add(combobox);

【问题讨论】:

  • 你试图在一个方法中定义一个方法,我很确定这是做不到的......
  • 好的。那么我将在哪里声明第二种方法以使其工作?
  • 技术上,你不需要它
  • 好吧,如果我不使用该方法,组合框中的选定项目将永远不会添加到文本字段中,除非有其他方法可以将其添加到文本字段中。

标签: java swing actionlistener jcombobox itemlistener


【解决方案1】:
public void actionPerformed(ActionEvent event) {   //Method declaration
    procedure = (String) combobox.getSelectedItem();

    private void itemStateChanged(ItemEvent e) {  //Another Method declaration
        if(e.getStateChange() == ItemEvent.SELECTED) {
            if("Focus".equals(e.getItem())) {
                textField_9.requestFocus();
            }
        }
    }
}

您在另一个方法中声明一个方法。 Java 语法不允许这样做。如果您尝试监视 ComboBox 中项目的状态更改,请使用 ItemListener

final JComboBox combobox = new JComboBox(procedurelist);
combobox.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        procedure = (String) combobox.getSelectedItem();
    }
});

combobox.addItemListener(new ItemListener(){

        public void itemStateChanged(ItemEvent e) {
            if(e.getStateChange() == ItemEvent.SELECTED) {
                if("Focus".equals(e.getItem())) {
                    textField_9.requestFocus();
                }
            }
        }
});

【讨论】:

  • 现在收到以下错误消息:无法降低从 ItemListener 继承的方法的可见性?
  • 通知public void itemStateChanged
【解决方案2】:

你在一个方法中声明一个方法,这是不能做到的。

根据您要执行的操作,您实际上并不需要它...

final JComboBox combobox = new JComboBox(procedurelist);
combobox.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        procedure = (String) combobox.getSelectedItem();

        if("Focus".equals(procedure)) {
            // Set text??
            textField_9.requestFocusInWindow();
            // Select all..
        }
    }

});
// Bad idea, learn to use layout managers
//combobox.setBounds(68, 216, 86, 20);
contentPane.add(combobox);

【讨论】:

  • +1 textField_9.setText(textField_9.getText()); textField_9.selectAll; textField_9.requestFocusInWindow()
  • @mKorbel +1 requestFocusInWindow
  • 你的课我记得很清楚
猜你喜欢
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多