gpt4 book ai didi

基于 JComboBox 值的 Java JButton.setVisible

转载 作者:行者123 更新时间:2023-12-01 12:52:04 25 4
gpt4 key购买 nike

好吧,我被困住了。我知道我是一个 Java 菜鸟,而且我做过一些愚蠢的事情,但我讨厌每次遇到困难时都跑到 StackOverflow。无论如何,这里是:

我正在使用表单构建一个简单的小应用程序。填写表格,它会为您计算一些值。我有一个 JComboBox,它在一系列 JTextField 中设置一些默认值。我希望有几个按钮(此时不执行任何操作)根据 JComboBox 中的值显示或隐藏。没什么大不了的,对吧?

目前,我可以在 JComboBox 的 actionPerformed() 方法中查看和操作 JTextField。但是,如果我尝试更改 JButton 上的 setVisible(true),我会收到 NullPointerException。

我将发布一些代码,但不是全部。我一直在 Eclipse Kepler 和 WindowBuilder 中这样做(我知道,我知道......),所以代码相当庞大。

这里定义了 JTextField 和 JButton 之一:

    txtAC = new JTextField();
txtAC.setFont(new Font("Tahoma", Font.BOLD, 12));
txtAC.setHorizontalAlignment(SwingConstants.CENTER);
txtAC.setToolTipText("Enter the percentage of facility electric usage resulting from air conditioning.");
txtAC.setForeground(new Color(0, 102, 204));
txtAC.setBounds(143, 180, 53, 20);
contentPane.add(txtAC);
txtAC.setColumns(10);

JButton btnAdd = new JButton("Add");
btnAdd.setToolTipText("Click the Add button to include the custom facility type to the Facility Type dropdown list.");
btnAdd.setBounds(573, 60, 89, 20);
btnAdd.setVisible(false);
contentPane.add(btnAdd);

这是 JComboBox 上的 actionPerformed 方法:

    final JComboBox cboFacilityType = new JComboBox();
cboFacilityType.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

if (isInitCBO)
return;

String sql = "SELECT * FROM tblDefaultIndustry WHERE INDUSTRY = '" + cboFacilityType.getSelectedItem() +"'";


try
{
rs = stmt.executeQuery(sql);
while (rs.next())
{
txtLighting.setText("");
txtAC.setText("");
txtRefrig.setText("");
txtEquip.setText("");
txtResistive.setText("");

if (rs.getString("INDUSTRY").equals("<User Defined>"))
{
usageFieldsEditable(true);
btnAdd.setVisible(true);
txtLighting.requestFocusInWindow();
}else{
txtLighting.setText(Integer.toString(rs.getInt(2)));
txtAC.setText(Integer.toString(rs.getInt(3)));
txtRefrig.setText(Integer.toString(rs.getInt(4)));
txtEquip.setText(Integer.toString(rs.getInt(5)));
txtResistive.setText(Integer.toString(rs.getInt(6)));
usageFieldsEditable(false);
btnAdd.setVisible(false);

}
}
}catch (SQLException e1)
{
e1.printStackTrace();
}

}

private void usageFieldsEditable(boolean b) {
// TODO Auto-generated method stub
txtLighting.setEditable(b);
txtAC.setEditable(b);
txtRefrig.setEditable(b);
txtEquip.setEditable(b);
txtResistive.setEditable(b);
}
});

起初,btnAdd 的表现就像没有任何与之关联的变量。我注意到 WindowBuilder 为 JTextFields 创建了私有(private)变量,但没有为 JButton 创建了私有(private)变量。所以我添加了一个来看看是否可行。没有骰子。反正没啥意义。

希望你已经足够继续这里了。 actionPerformed() 方法可以查看和操作 JTextField 但不能查看和操作按钮,这是没有意义的。他们在同一个面板中,一切都在同一个面板中。

感谢您的智慧。

最佳答案

为按钮设置一个字段绝对是有意义的,因为 actionPerformed() 方法需要访问按钮以使其可见或隐藏。但是您会收到 NullPointerException,这意味着 btnAdd 字段未初始化。事实上,而不是这样做

this.btnAdd = new JButton("Add");

或者简单地

btnAdd = new JButton("Add");

这将初始化 btnAdd 字段,你正在做

JButton btnAdd = new JButton("Add");

声明并初始化一个本地变量,该变量恰好与btnAdd字段同名,从而使该字段未初始化。

旁注:您应该学习使用布局管理器,而不是对组件进行硬编码边界,​​这会使您的应用程序在与您的设置不同的计算机上变得丑陋。您还应该尝试不要将使用 JDBC 的数据访问代码与 UI 代码混合在一起。将数据访问委托(delegate)给另一个对象。

关于基于 JComboBox 值的 Java JButton.setVisible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24148894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com