- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,我有一个包含 12 个 JCheckBox 的面板,在加载界面时所有 JCheckBox 都被禁用。当用户从 JComboBox 中选择一个选项时,我只想根据在 JComboBox 中选择的项目启用某些 JCheckBox。
目前在 JComboBoxActionPerformed 中,我启用了与选择相关的所有 JCheckBox,但在这样做之前尝试禁用当前启用的所有按钮(以防 JComboBox 中的选定项目发生更改)。
我必须禁用任何已启用按钮的代码如下:
public void disableBoxes() {
for (JCheckBox j : ArrayOfJCheckBox) {
if (j.isEnabled()) {
j.setEnabled(false);
}
}
}
但是这并没有做任何事情,如果我从JComboBoxActionPerformed 方法,然后是 JCheckBox 的启用,正如我所期望的那样。让我假设问题出在这段代码上。
此外,我目前正在手动创建 ArrayOfJCheckBox
,我想知道是否有一种方法可以通过添加获取面板内的所有 JCheckBox 并将它们添加到列表中来实现?如果这是可能的,那么是否可以像我已经尝试做的那样遍历列表?
感谢您的帮助!
院长
最佳答案
你说:
OK so I have a Panel containing 12 JCheckBox's, Upon the interface loading all of the JCheckBox's are disabled. When a user selects an option from the JComboBox I want only certain JCheckBox's to be enabled depending on the item selected in the JComboBox.
我们不知道您将使用什么标准来决定启用或禁用哪个 JCheckBox,但目前这并不是非常关键。
At the moment in the JComboBoxActionPerformed i am enabling all of the JCheckBoxes relevant to the selection but prior to doing so attempting to disable all buttons that are currently enabled (In case the selected item in the JComboBox is changed).
这应该有效。
The code i have to disable any enabled buttons is as follows:
public void disableBoxes() {
for (JCheckBox j : ArrayOfJCheckBox) {
if (j.isEnabled()) {
j.setEnabled(false);
}
}
}This does not however do anything, If I remove the call for this method from the JComboBoxActionPerformed method then the JCheckBox's enable as i would expect. Leading me to assume that the problem lies with this code.
这应该可行,但您的帖子没有向我们展示它为何不起作用,因此根据所提供的信息,我们无法帮助解决它尚未起作用的具体原因。
Furthermore i am currently creating the ArrayOfJCheckBox manually, i was wondering if there is a way i could do it by maybe adding getting all of the JCheckBox's inside the panel and adding them to a list? If this is possible would it
无法提供帮助,因为我们不知道您是如何手动创建“ArrayOfJCheckBox”的,因为您还没有发布任何代码,我们也无法帮助处理第二个请求,因为我们不知道您的程序是怎样的结构化。
说了这么多,应该很容易创建一个 JCheckBox 或 JToggleButton 列表(父类),然后在需要时遍历启用和禁用组件的列表。
例如:
import java.awt.BorderLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
@SuppressWarnings("serial")
public class CheckBoxList extends JPanel {
private static final int CHECK_BOX_COUNT = 12; // number of JCheckBoxes
private List<JCheckBox> checkBoxList = new ArrayList<>(); // list of JCheckBoxes
private DefaultComboBoxModel<Integer> cModel = new DefaultComboBoxModel<>(); // combo box model
private JComboBox<Integer> comboBox = new JComboBox<>(cModel);
public CheckBoxList() {
// create JPanel to hold JCheckBoxes
JPanel checkBoxPanel = new JPanel(new GridLayout(0, 1, 0, 5));
// create JCheckBoxes and add to both the above JPanel and the checkBoxList
for (int i = 0; i < CHECK_BOX_COUNT; i++) {
String text = "CheckBox " + i;
JCheckBox checkBox = new JCheckBox(text);
checkBox.setEnabled(false); // disabled by default
checkBoxPanel.add(checkBox);
checkBoxList.add(checkBox);
}
// fill our combo box's model. For this example, I'm just going to use
// Integers, and then enable only the JCheckBoxes that are multiples of the selected int
for (int i = 0; i < 5; i++) {
cModel.addElement(i + 1);
}
comboBox.setSelectedIndex(-1); // set combo at empty
comboBox.addActionListener(new ComboListener()); // add ActionListner
// JPanel to hold the JComboBox
JPanel centerPanel = new JPanel(new GridBagLayout());
centerPanel.add(comboBox);
int gap = 35;
centerPanel.setBorder(BorderFactory.createEmptyBorder(gap, gap, gap, gap));
// add all to the main JPanel (this)
gap = 5;
setBorder(BorderFactory.createEmptyBorder(gap, gap, gap, gap));
setLayout(new BorderLayout());
add(centerPanel, BorderLayout.CENTER);
add(checkBoxPanel, BorderLayout.LINE_END);
}
private class ComboListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// get combo's selection
int selection = (Integer) comboBox.getSelectedItem();
// use the information to enable/disable JCheckBoxes
for (int i = 0; i < checkBoxList.size(); i++) {
if (i % selection == 0) {
checkBoxList.get(i).setEnabled(true);
} else {
checkBoxList.get(i).setEnabled(false);
}
}
}
}
// create and display GUI
private static void createAndShowGui() {
CheckBoxList mainPanel = new CheckBoxList();
JFrame frame = new JFrame("CheckBoxList");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
同样,如果这没有帮助,那么您最好创建并发布一个 Minimal, Complete, and Verifiable Example Program将代码压缩为仍然可以编译和运行的最小位,没有外部依赖性(例如需要链接到数据库或图像),没有与您的问题无关的额外代码,但仍然可以证明您的问题,类似到我上面的代码。
关于java - 根据 JComboBox.SelectedItem 启用和禁用 JCheckBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31596382/
我正在开发一个需要确定选择了哪个 JCheckBox 的程序。我正在使用三个不同的按钮组,其中两个有重叠的文本。我需要能够确定是哪个触发了事件,以便将适当的费用(COSTPERROOM 与 COSTP
我正在为我的类(class)做一个项目,我有以下情况:它是一个 JDialog,它在构造函数上接收一个 Object 以使用它。对象“Album”有两个属性,根据 MySQL boolean 值可以是
我正在开发一个 Java 应用程序。主类框架名称为“a”。在框架“a”中,有一个组件 - jCheckBox。因此,当我检查(勾选)这个 jCheckBox 时,它会打开另一个框架“b”。我想在关闭框
有时我需要复选框的标签位于复选框的左侧而不是右侧,因此不使用 JCheckBox checkbox = new JCheckBox("label",false); 我愿意: JCheckBox che
如何更改 JCheckbox 中文本的位置。 我希望文本位于复选框的左侧,而不是右侧的默认文本。 我曾多次使用 jcheckbox、jtooglebutton 和 jabstractButton ap
我已经检查了所有地方是否有修复,但没有任何方法可以使我的复选框出现。我将它添加到面板并将面板添加到窗口。该按钮出现,因此肯定是复选框有问题。这是我的代码: import java.awt.Border
这个问题已经有答案了: Java ActionListener error: incompatible types (4 个回答) 已关闭 5 年前。 我最近刚刚开始学习 Java 代码。我在添加监听
我已经实现了一个返回 JCheckBox 的 TreeCellRenderer(渲染器扩展 JCheckBox 并根据项目中的标志设置其选择状态的简单代码)并且运行良好。但是,当列表中有多个项目时,它
当表模型最初未定义时如何添加jcheckbox。 我已经用数据库中的数据填充了 jtable,但现在我需要添加一个用于选择所需记录的 jcheckbox。 如果数据表行是用 boolean 类预定义的
我想在java中创建一个具有可变数量复选框的框架,这将取决于数据库中存在的行数。我面临的问题是:-1. 如何统计数据库的行数?2. 如何以及在哪里存储数据库列中存在的数据?3. 如何使用数据库列中存在
这个问题已经有答案了: How to add checkboxes to JTABLE swing [closed] (1 个回答) 已关闭 9 年前。 我创建了一个 jTable 类,它与另一个类一
我有一个 List,其中包含某种类型的 JPA Entity 对象。它们的reference字符串值显示在JList中供用户查看。 我希望我的用户能够在 UI 中选择过滤器作为 JCheckBox,例
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度的了解。包括尝试的解决方案、为什么它们不起作用以及预期结果
我希望我的程序在我启用一个名为 doos 的复选框时开始在鼠标下打印 RGB 值,并且我希望它在取消选择时停止。 private void doosActionPerformed(java.a
当我选择JCheckBox时,它会自动取消选择... import javax.swing.*; import java.awt.*; import java.awt.event.*; public
我正在使用 JCheckBox 查找客户想要购买的商品,如果选择了 JCheckBox(hat),则总计 += hatprice,但它不会更新总计。我的代码: import javax.swing.*
我有一个 JCheckbox,当单击该复选框时,我想在标签内设置文本。 到目前为止,我已经声明了变量以及复选框和标签框架内的设置: JCheckBox chckbxIncludeExt;
我正在尝试创建一个 java GUI,但在显示复选框时遇到一些问题。我查看了 oracle 教程并包含了他们拥有的所有代码,但我不确定我缺少什么。有什么想法吗? public class HPAPro
我有一个帮助 Pane ,它出现在程序开始时,但可以关闭。如果用户希望它返回,菜单栏中有一个选项可以重新激活它。但是,当他们选择从帮助菜单中显示它时,它会自动重新选中“不再显示”框。如何使该框保持与用
我正在尝试 JCheckBox。我想要的是,当我选中其中任何一个(复选框)时,复选框中的文本应该显示在 jtextarea 中。 我现在拥有的是: import java.awt.*; import
我是一名优秀的程序员,十分优秀!