1.我创建了一个JComboBox和Jtable。当用户从JComboBox中选择项目时,它们被添加到Jtable中
2.我不想让用户选择他以前在JComboBox中选择的项目
3.因此必须禁用选定的选项(不可选择)。我该怎么做?4.下面的代码在添加到JTable中后从JComboBox中删除该选定项,但我有兴趣禁用它
String getchoice=(String)selectedgames_combobox.getSelectedItem();
DefaultTableModel gamesmodel = new DefaultTableModel();
//adding selected choices from JComboBox in JTable
gamesmodel.addColumn("Selected Games");
gamesmodel.insertRow(gamesmodel.getRowCount(),new Object[]{ getchoice }) ;
//refreshing table
games_table.setModel(gamesmodel);
//removing the selected item from JComboBox
selectedgames_combobox.removeItem(getchoice);
以下是我的解决方案(可能有用)
/**
* A ComboBox with Enabling/disabling items support
*/
public class AvailableItemComboBox extends JComboBox {
private static final long serialVersionUID = 1L;
// previosly chosen item
protected int old = -1;
/**
* Default constructor
*/
public AvailableItemComboBox() {
super();
setRenderer(new EnabledJComboBoxRenderer());
initializeComboBox();
}
/**
* Constructor with model
*
* @param model
*/
public AvailableItemComboBox(ComboBoxModel model) {
super(model);
setRenderer(new EnabledJComboBoxRenderer());
initializeComboBox();
System.out.println("selected index is " + getSelectedIndex());
}
/**
* Constructor with data
*
* @param model
*/
public AvailableItemComboBox(Available[] items) {
super(items);
setRenderer(new EnabledJComboBoxRenderer());
initializeComboBox();
System.out.println("selected index is " + getSelectedIndex());
}
private void initializeComboBox() {
setSelectedIndex(findFirstAvailableItem());
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Listener called>>>>>>>>>>>>>>>>>>");
if (old != getSelectedIndex()) {
if (!((Available) getSelectedItem()).isEnabled()) {
setSelectedIndex(old);
} else {
old = getSelectedIndex();
}
}
}
});
}
// Finds first selecteditem and sets it as previous state
private int findFirstAvailableItem() {
int result = -1;
for (int index = 0; index < this.getItemCount(); index++) {
if (((Available)this.getItemAt(index)).isEnabled()) {
result = index;
break;
}
}
old = result;
return result;
}
}
public class EnabledJComboBoxRenderer extends BasicComboBoxRenderer {
private static final long serialVersionUID = 1L;
private Color disabledColor = Color.lightGray;
/**
* Constructs a new renderer for a JComboBox which enables/disables items
* based upon the parameter model.
*
* @param enabled
*/
public EnabledJComboBoxRenderer(){
super();
}
/**
* Sets the color to render disabled items.
*
* @param disabledColor
*/
public void setDisabledColor(Color disabledColor){
this.disabledColor = disabledColor;
}
/**
* Custom implementation to color items as enabled or disabled.
*
* @inheritDoc
*/
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
boolean enabled = ((Available) value).isEnabled();
if (!enabled) {
if (isSelected) {
c.setBackground(UIManager.getColor("ComboBox.background"));
} else {
c.setBackground(super.getBackground());
}
c.setForeground(disabledColor);
} else {
c.setBackground(super.getBackground());
c.setForeground(super.getForeground());
}
return c;
}
}
public interface Available {
public boolean isEnabled();
public void setEnabled(boolean enable);
}
假设您有一个列表,其中包含一些应该禁用的元素,您需要更改禁用元素的外观,并需要阻止用户选择这些项目。为了能够防止用户选择禁用的选项,您需要覆盖< code>JComboBox的< code>setSelectedIndex方法,如下所示:
public void setSelectedIndex(int index) {
if (!disabled_items.contains(index)) {
super.setSelectedIndex(index);
}
}
此外,您还可以在<code>BasicComboxRenderer</code>中更改项目的颜色,如下所示:
if (disabled_items.contains(index)) {
setBackground(list.getBackground());
setForeground(UIManager.getColor("Label.disabledForeground"));
}
以获得进一步的细节。
我正在开始一个项目,流口水和口水guvnor。 我的规则部署在drools Guvnor中。我的规则引擎实例可以通过drools Guvnor公开的pkg文件访问这些规则,当您进行包发布、构建和发布时。 这一切都很好,我正在寻找的是在运行时禁用规则的解决方案。 我现在唯一的解决方案是去guvnor,归档规则,并对包含该规则的包进行构建+发布。 不是还有别的策略吗?
这是一个相当普遍的问题,我用过的解决方案和我后来搜索发现的差不多。其中一个实现了带有< code>JLabel的< code>ListCellRenderer,它根据当前选择的索引启用或禁用自身: 问题是,尽管列表项在视觉上显示为禁用,但尽管调用了< code>setFocusable,它仍然可以被选中。我该如何禁用它?
我更新到了新的Android Studio 4.0版,我面临一个令人恼火的问题 我相信是即时运行的结果(或者这个功能的新名称是什么)。基本上使用Android Studio运行/播放按钮,应用程序不会在设备上启动有时和不稳定。它总是安装,但有时无法启动。 我在过去有过类似的问题,只是禁用了即时运行,但是,在Android Studio 4.0中,我在任何地方都看不到任何选项来禁用它。我在某个地方读
当我试图再次运行同样的测试时: 如何禁用缓存,以便gradlew运行整个测试? 谢谢
当使用并在本地运行集成测试时,我会得到以下错误消息: 这是完全可以理解的,因为这个环境变量在本地不存在,而且我不想在运行测试时使用Sleuth/StackDriver跟踪。我已经查看了参考文档,但似乎只能找到如何针对特定集成点禁用Sleuth的信息,如RxJava、RestTemplate等,但如何完全禁用Sleuth呢? 我尝试设置,但这似乎没有什么不同。