解决组件的问题 - 范围

时间:2013-05-12 16:25:36

标签: java swing user-interface scope absolutelayout

private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JPanel panel = new JPanel();
    panel.setBounds(0, 0, 434, 261);
    frame.getContentPane().add(panel);
    panel.setLayout(null);

    JCheckBox chckbxCheckbox = new JCheckBox("checkbox");
    chckbxCheckbox.setBounds(44, 41, 97, 23);
    panel.add(chckbxCheckbox);

    JCheckBox chckbxCheckbox_1 = new JCheckBox("checkbox 2");
    chckbxCheckbox_1.setBounds(197, 41, 97, 23);
    panel.add(chckbxCheckbox_1);
}

基本上,我希望chckbxCheckbox改变chckbxCheckbox_1的状态。更改后,代码部分如下所示:

JCheckBox chckbxCheckbox = new JCheckBox("checkbox");
    chckbxCheckbox.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            chckbxCheckbox_1.setEnabled(false);
        }
    });
    chckbxCheckbox.setBounds(44, 41, 97, 23);

    panel.add(chckbxCheckbox);

    JCheckBox chckbxCheckbox_1 = new JCheckBox("checkbox 2");
    chckbxCheckbox_1.setBounds(197, 41, 97, 23);
    panel.add(chckbxCheckbox_1);

我得到以下内容:

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem: 
chckbxCheckbox_1 cannot be resolved

问题变成了,如何处理代码中显示较低的组件?同样,这只是一个示例代码。我正在处理的代码中有很多组件彼此交互,最终会阻止我移动代码以避免这个问题。

2 个答案:

答案 0 :(得分:2)

您正在隐藏chckbxCheckbox_1变量。您需要在类中声明它而不是方法或构造函数。

而不是,

private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JPanel panel = new JPanel();
    panel.setBounds(0, 0, 434, 261);
    frame.getContentPane().add(panel);
    panel.setLayout(null);

    JCheckBox chckbxCheckbox = new JCheckBox("checkbox");
    chckbxCheckbox.setBounds(44, 41, 97, 23);
    panel.add(chckbxCheckbox);

    JCheckBox chckbxCheckbox_1 = new JCheckBox("checkbox 2");
    chckbxCheckbox_1.setBounds(197, 41, 97, 23);
    panel.add(chckbxCheckbox_1);
}

做的:

public MyClass {
    // declared in class
    private JCheckBox chckbxCheckbox_1;

    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JPanel panel = new JPanel();
        panel.setBounds(0, 0, 434, 261);
        frame.getContentPane().add(panel);
        panel.setLayout(null);

        JCheckBox chckbxCheckbox = new JCheckBox("checkbox");
        chckbxCheckbox.setBounds(44, 41, 97, 23);
        panel.add(chckbxCheckbox);

        // declare this variable in the class
        chckbxCheckbox_1 = new JCheckBox("checkbox 2");
        chckbxCheckbox_1.setBounds(197, 41, 97, 23);
        panel.add(chckbxCheckbox_1);
    }

接下来,您需要阅读并学习使用Swing布局管理器。

答案 1 :(得分:-1)

您应该为此使用getter,而不是直接访问该项目。 getter可以在第一次使用时实例化对象。

getCheckBox1()
{
    if(mCheckbox1 == null)
    {
        mCheckbox1 = new;
    }
    return mCheckbox1;
}