【问题标题】:How to disable Java Swing JButton when initializing this program?初始化此程序时如何禁用 Java Swing JButton?
【发布时间】:2016-02-12 10:34:40
【问题描述】:

如何在程序初始化时禁用我的btnExecute JButton
之后,当三个JComboBox选中的项不等于“选择...”项时,启用此按钮。
这个问题的第二部分解决了,但是在启动程序时启用了按钮,如果三个JComboBox不等于“选择...”项,这应该解决为只允许在JButton上。

这是我的代码:

public class WebStarter_v2 {

private JFrame frame;

private JComboBox<Object> cbProgram;
private JComboBox<Object> cbVersion;
private JComboBox<Object> cbAction;

private JButton btnExecute;

private boolean programSelected = false;
private boolean versionSelected = false;
private boolean actionSelected = false;

private String prototypeValue="XXXXXXXXXX";

private String[] programs = {"Choose...", "Apache", "PHP-FPM", "MySQL"};
private String[] actions = {"Choose...", "start", "restart", "stop"};
//private String[] status = {"standby", "running", "stopped", "error"};

private String[] apacheVersions = {"Choose...", "2.2.31", "2.4.17"};
private String[] phpVersions = {"Choose...", "5.6.16", "7.0.0"};
private String[] mysqlVersions = {"Choose...", "5.7.9"};

public static void main(String[] args) {...}

public WebStarter_v2() {
    initialize();
}
private void initialize() {
...
JPanel panel_Actions = new JPanel();
splitPane.setTopComponent(panel_Actions);

...
...

cbProgram = new JComboBox<Object>(new DefaultComboBoxModel<Object>(programs));
cbProgram.setPrototypeDisplayValue(prototypeValue);
cbProgram.addItemListener(new ItemListener() {
    @Override
    public void itemStateChanged(ItemEvent event) {
        if(event.getStateChange() == ItemEvent.SELECTED){
            String item = event.getItem().toString();
            if ( item.contains("Apache") ){
                makeComboBoxModel(cbVersion, apacheVersions);
                programSelected = true;
                updateButtonState();
            }                       
            else if ( item.contains("PHP-FPM") ){
                makeComboBoxModel(cbVersion, phpVersions);
                programSelected = true;
                updateButtonState();
            }
            else if ( item.contains("MySQL") ){
                makeComboBoxModel(cbVersion, mysqlVersions);
                programSelected = true;
                updateButtonState();
            }
            else
            {
                programSelected = false;
                //set initial state of cbVersion and cbAction
                cbVersion.setModel(new DefaultComboBoxModel<Object>());
                cbAction.setModel(new DefaultComboBoxModel<Object>());
                updateButtonState();
            }
        }
    }
});
...
...
cbVersion = new JComboBox<Object>();
cbVersion.setPrototypeDisplayValue(prototypeValue);
cbVersion.addItemListener(new ItemListener() {
    @Override
    public void itemStateChanged(ItemEvent event) {
        if(event.getStateChange() == ItemEvent.SELECTED){
            String item = event.getItem().toString();
            if ( !item.contains("Choose...") )
            {
                versionSelected = true;
                makeComboBoxModel(cbAction, actions);
                updateButtonState();
            }
            else{
                versionSelected = false;
                cbAction.setModel(new DefaultComboBoxModel<Object>());
                updateButtonState();
            }
        }
    }
});
...
...
cbVersion = new JComboBox<Object>();
cbVersion.setPrototypeDisplayValue(prototypeValue);
cbVersion.addItemListener(new ItemListener() {
    @Override
    public void itemStateChanged(ItemEvent event) {
        if(event.getStateChange() == ItemEvent.SELECTED){
            String item = event.getItem().toString();
            if ( !item.contains("Choose...") )
            {
                versionSelected = true;
                makeComboBoxModel(cbAction, actions);
                updateButtonState();
            }
            else{
                versionSelected = false;
                cbAction.setModel(new DefaultComboBoxModel<Object>());
                updateButtonState();
            }
        }
    }
});
...
...
cbAction = new JComboBox<Object>();
cbAction.setPrototypeDisplayValue(prototypeValue);
cbAction.addItemListener(new ItemListener() {
    @Override
    public void itemStateChanged(ItemEvent event) {
        if(event.getStateChange() == ItemEvent.SELECTED){
            String item = event.getItem().toString();
            if ( !item.contains("Choose...") ){
                actionSelected = true;
                updateButtonState();
            }
            else{
                actionSelected = false;
                updateButtonState();
            }
        }
    }
});
...
...
btnExecute = new JButton("Execute");
...
...
JPanel panel_Messages = new JPanel();
splitPane.setBottomComponent(panel_Messages);
}

【问题讨论】:

    标签: java swing button jbutton jcombobox


    【解决方案1】:

    你想要 JButtonsetEnabled 方法:

    btnExecute.setEnabled(false);
    

    之后,当您的用户选择三个JComboBox 时,您可以将其设置回true

    【讨论】:

    • 我解决了,所以对他来说已经足够了。但就我而言,最后一个键是在代码的其他元素之后创建的。因此,尽管键中定义的全局变量不起作用。现在我首先转换了按钮代码,所以现在可以完美运行。 :)
    【解决方案2】:

    或者你可以setVisible()这个:

    btnExecute.setVisible(false);
    

    然后在每个 JComboBox 的 addItemListener 中,您应该检查 programSelectedversionSelectedActionSelected。如果都是true,则制作

    btnExecute.setVisible(true);
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多