我在设置JComboBox时遇到问题。用户在separte面板上有几个选项,这些选项决定是否应该启用/禁用JComboBox——我的问题是,即使禁用了JComboBox,用户仍然可以从中进行选择(当组合框变灰时,它被禁用)!JComboBox使用自定义TableCellRenderer和自定义DefaultCellEditor。JComboBox也是JTable中一行的单元格/列。
下面是代码的细分:
*JTable的编制者*
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
JComponent component = (JComponent) super.prepareRenderer(renderer, row, column);
//Code which checks to see if component should be enabled
enableComponent = false;
component.setEnabled(enableComponent);
}
*设置组合框*
public void setupUserCombo(){
TableColumn col = getColumnModel().getColumn(0);
List<String> comboUsers = new String["Adam", "Ben"]
MyComboBoxRenderer jComboBox = (new MyComboBoxRenderer((String[])values.toArray(comboUsers ));
col.setCellEditor(new MyComboBoxEditor((String[])values.toArray(new String[0])));
col.setCellRenderer(jComboBox);
repaint();
}
*TableCellRenader*
public class MyComboBoxRenderer extends JComboBox implements TableCellRenderer {
private static final long serialVersionUID = 1L;
public MyComboBoxRenderer(String[] items) {
super(items);
repaint();
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
setSelectedItem("");
if (isSelected) {
super.setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}
setSelectedItem(value);
return this;
}
}
*DefaultCellEditor*
public class MyComboBoxEditor extends DefaultCellEditor {
private static final long serialVersionUID = 1L;
public MyComboBoxEditor(String[] items) {
super(new JComboBox(items));
}
}
任何关于我做错了什么的建议都将不胜感激!!
谢谢,
>
请参阅JTable教程,了解如何使用组合框作为编辑器
@aterai查看
不存储JComponents
在XxxTableModel
中,然后从JComboBox
中最后选择的值存储在XxxTableModel
中,作为String value
如果要禁用表中单元格的编辑,应覆盖TableModel。iCelleditable(int,int)
在这里,您所做的只是渲染一个禁用的JComboBox,但这并不阻止编辑,它只是渲染一个禁用的JComboBox。另见http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender
这是一个相当普遍的问题,我用过的解决方案和我后来搜索发现的差不多。其中一个实现了带有< code>JLabel的< code>ListCellRenderer,它根据当前选择的索引启用或禁用自身: 问题是,尽管列表项在视觉上显示为禁用,但尽管调用了< code>setFocusable,它仍然可以被选中。我该如何禁用它?
我正在使用SpringBoot和@JmsListener从同一个QManager中的多个队列中检索IBM MQ消息。到目前为止,我可以得到没有任何问题的消息。但也有可能出现这样的情况,我不得不暂时停止使用其中一个队列中的MSG。它不一定是动态的。 我没有使用任何自定义ConnectionFactory方法。需要时,我想在application.properties中进行配置更改,以禁用特定的队列消
1.我创建了一个JComboBox和Jtable。当用户从JComboBox中选择项目时,它们被添加到Jtable中 2.我不想让用户选择他以前在JComboBox中选择的项目 3.因此必须禁用选定的选项(不可选择)。我该怎么做?4.下面的代码在添加到JTable中后从JComboBox中删除该选定项,但我有兴趣禁用它
我有一个,其中有8个项目,我想显示其中的所有项目,但在特定条件下,用户只能选择前两个项目,因此我编写了程序,如果条件为真,用户选择任何其他选项,则会显示一个消息框,显示然后自动选择默认值。到现在为止,一直都还不错。 但现在的问题是,用户无法通过查看的选项来判断他可以选择哪些选项,因此我想做的是,如果条件为真,那么除前两个选项之外的所有选项都应该被禁用(或灰显或其他),这样用户就可以判断出您无法选择
单击“删除”按钮时显示自定义弹出。单击“删除”按钮时禁用。当用户点击“确定”或“取消”按钮时,“删除”按钮将在删除操作后启用。当点击对话框中的X按钮时,对话框会立即关闭,但删除按钮仍处于禁用状态。下面是我的代码 用于自定义弹出的代码
问题内容: 我想制作一个JComboBox,它具有用于项目而不是文本的复选框。此外,应该可以检查多个项目并从组件中检索选定的项目。我应该做一个自定义的ComboBoxUI,ComboBoxEditor,ListCellRenderer,ComboPopUp还是其他完全不同的东西?是否有一个现有的Java控件可以做到这一点? 问题答案: 这相当容易实现。在这里找到链接文本