java—当某个组件更改其边框颜色时启用jbutton

y1aodyip  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(426)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

5个月前关门了。
改进这个问题
我的目标是仅当一些jtextfields和jcombobox将其边框颜色从红色更改为绿色时才启用jbutton。
这些组件包含在三个不同的jpanel中。
我试图创建一个函数来读取jpanel中的所有组件,但是,当我要比较颜色时,程序会返回一个错误的方式来强制转换变量。
下面是我的功能。
有人能帮我吗?

public static boolean countBoards(JPanel panel){
        boolean red = false;

        for(Component control : panel.getComponents())
        {
            if(control instanceof JTextField)
            {
                JTextField ctrl = (JTextField) control; 
                Color lineColor = ((LineBorder)ctrl.getBorder()).getLineColor();

                if(lineColor.equals(Color.red))
                    red = true;                
            }  
            else if(control instanceof JComboBox)
            {
                JComboBox ctr = (JComboBox) control; 
                Color lineColor = ((LineBorder)ctr.getBorder()).getLineColor();

                if(lineColor.equals(Color.red))
                    red = true;               
            }
        }                 

        return red;
    }
x759pob2

x759pob21#

更改组件的边框时,将触发属性侦听器。您可以将属性侦听器注册到combobox/textfield,并根据新边框启用/禁用按钮。
举个例子:

@Test
public void test() {
    JButton myButton = new JButton();
    JComboBox<String> combo = new JComboBox<>();
    combo.addPropertyChangeListener("border", e -> {
        if (e.getNewValue() != null && e.getNewValue() instanceof LineBorder) {
            LineBorder border = (LineBorder) e.getNewValue();
            myButton.setEnabled(border.getLineColor().equals(Color.green));
        }
    });
    assertTrue(myButton.isEnabled(), "Button should be initially enabled.");

    combo.setBorder(BorderFactory.createLineBorder(Color.red));
    assertFalse(myButton.isEnabled(), "Button should be disabled when red line border occurs.");

    combo.setBorder(BorderFactory.createLineBorder(Color.green));
    assertTrue(myButton.isEnabled(), "Button should be enabled when green line border occurs.");
}

相关问题