【问题标题】:How to set selected index to 0 of a combo box from another class如何将选定索引设置为另一个类的组合框的 0
【发布时间】:2016-08-13 14:40:04
【问题描述】:

我尝试测试当我按下按钮时是否可以更改组合框选择的索引,但是如果我的组合框从另一个类添加到我的框架中,我尝试过的方法对我不起作用,请问告诉我我想念什么?

我创建组合框的班级是:

package MyPackage;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;

public class AddMyBox {

    private JComboBox combobox;
    String[] array = {"Select", "1", "2", "3"};

    public JComboBox theBox() {
        combobox = new JComboBox();
        combobox.setModel(new DefaultComboBoxModel(array));
        combobox.setBounds(10, 11, 414, 20);
        return combobox;
    }

}

创建我的框架和添加组件的类是:

package MyPackage;

import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class MyFrame extends JFrame {

    public MyFrame() {
        getContentPane().setLayout(null);
        setVisible(true);

        // adding the comboBox from class AddMyBox
        AddMyBox getBox = new AddMyBox();
        getContentPane().add(getBox.theBox());

        JButton btnNewButton = new JButton("New button");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                try {
                    // if selected index is 1 make it 0 when the button is pressed
                    if(getBox.theBox().getSelectedIndex() != 0) {
                        getBox.theBox().setSelectedIndex(0);
                    }
                } catch (Exception e) {
                    // TODO: handle exception
                }
            }
        });
        btnNewButton.setBounds(10, 63, 414, 23);
        getContentPane().add(btnNewButton);

        setSize(500,400);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public void MyFrame1() {
        // TODO Auto-generated method stub
    }

}

我的主要课程是: 包我的包;

public class MyMain {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MyFrame getFrame = new MyFrame();
        getFrame.MyFrame1();
    }

}

【问题讨论】:

  • “你能告诉我我想念什么吗?” 基本 OOP,应该在两个要从命令行运行的类中弄清楚。 GUI 是一个高级主题,您应该已经了解对象引用和方法访问对属性的封装。

标签: java swing jbutton jcombobox selectedindex


【解决方案1】:
public JComboBox theBox() {
    combobox = new JComboBox();
    combobox.setModel(new DefaultComboBoxModel(array));
    combobox.setBounds(10, 11, 414, 20);
    return combobox;
}

每次您调用theBox() 方法时,都会创建一个新的组合框,因此您的 ActionListener 中的逻辑会引用一个在框架上不可见的组合框,因此您的可见组合框永远不会改变。

您的班级结构错误。您需要:

  1. 为简单地创建组合框的类创建一个构造函数。这基本上就是您需要将前 3 个语句移到构造函数中。
  2. theBox() 方法更改为简单地返回comboBox 变量。 (这是删除前 3 个语句后剩下的唯一语句。

编辑:

我从 Hovercrafts 的答案中复制了其他问题,因为 OP 无法引用它们:

其他问题:

  • 这个combobox.setBounds(10, 11, 414, 20); 不是你想要做的事情——包括使用幻数,使这个方法非常不灵活,并建议你使用null 布局,这是你真正想避免的事情。李>
  • getContentPane().setLayout(null); 是的。不要这样做。虽然空布局和setBounds() 对于 Swing 新手来说似乎是创建复杂 GUI 的最简单和最好的方法,但创建的 Swing GUI 越多,使用它们时遇到的困难就越严重。当 GUI 调整大小时,它们不会调整您的组件大小,它们是增强或维护的皇家女巫,放置在滚动窗格中时它们完全失败,在与原始不同的所有平台或屏幕分辨率上查看时它们看起来很糟糕.
  • catch (Exception e) { // TODO: handle exception } -- 按照评论的建议去做 -- 处理 你的异常,永远不要忽略它们。否则,您将进行相当于闭眼开车的编程。

【讨论】:

  • 不,你是对的。是我的大脑还没有运作——需要更多的咖啡! 1+
  • @camickr Woooooow,这似乎是一个复杂的话题,实际上,充满鳗鱼的气垫船的建议确实帮助了我并让它发挥了作用。我会尝试一遍又一遍地阅读您的评论以真正理解它,非常感谢您
  • @AboelmagdSaad,没那么复杂。它是任何类的基本设计构造函数应该用于创建类的对象。 “getter”方法应该只返回对对象的引用,而不是创建一个新的。所以真的你的theBox()方法应该被称为getBox()。查看 JDK 中任何类的 API,您将看到该类的“getter”和“setter”方法。
猜你喜欢
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多