我想控制在JComboBox中按下向下箭头按钮时打开的工作表的大小,我希望它显示更多选项这可能吗?
AutoCompleteDecorator.decorate( myComboBox );
这很可爱.但是,它仅从键入文本的开头向前搜索.
因此,如果我的组合包含:[Apple,Banana,Grape,Orange]在"严格"模式下键入"an"将不会显示任何结果.在非严格模式下,也没有搜索到任何内容.我希望它能匹配'Banana'和'Orange',因为这两个项目都包含我的打字文本.
是否有任何自动完成库允许此类功能?我认为策略方法在这里效果最好,但我找不到任何适用的方法.我很好地扩展了现有的功能 - 只要我不重新发明轮子.
提前致谢!
编辑
Downvoter,这怎么回事?我提供了该问题的可运行示例代码.如果它适合您,请让我知道或指出不清楚的地方.
您好,
在下面的代码中有一个单独JComboBox的JFrame,当鼠标进入JComboBox或被点击或焦点获取时,我不会收到通知.但是,PopupMenuEvent工作正常.
我究竟做错了什么?(我的目标是在单击JComboBox的文本组件时收到警报)
public class TestJComboBox extends javax.swing.JFrame
{
public TestJComboBox()
{
initComponents();
}
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jComboBox1 = new javax.swing.JComboBox();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
formMouseClicked(evt);
}
});
jComboBox1.setEditable(true);
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
jComboBox1.setName("jComboBox1"); // NOI18N
jComboBox1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jComboBox1MouseClicked(evt);
}
public void mouseEntered(java.awt.event.MouseEvent evt) …Run Code Online (Sandbox Code Playgroud) 我有一个JTable,其中包含一个包含JComboBox的列.
我有一个附加到JComboBox的ItemListener,它对任何更改起作用.
但是,ItemListener没有获取已更改的ComboBox所在的Row的方法.
我需要行号以便在ComboBox发生更改时对同一行中的另一列进行操作.
任何帮助,将不胜感激.
这是我的简短代码.我想要完成的是在itemlistener获取更改时获取ComboBox的表行.
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.IOException;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class Example extends JFrame {
private static final long serialVersionUID = 1L;
public static int maxX, maxY;
public static final String[] columnHeads = {"Col 1", "Col 2", "Col 3"};
public static void main(String args[]) throws IOException {
Example example = new Example();
}
public Example() {
//Create Table Model
DefaultTableModel model = new DefaultTableModel();
for (int index …Run Code Online (Sandbox Code Playgroud) 我有一个JComboBox,其值通过网络检索.
我正在寻找一种向用户指示该事实的方法,当用户想要查看列表时,展开下拉列表,然后才检索数据.
基本要求包括:
请注意,在用户想要查看组合的值(即展开下拉列表)之前,不会检索数据.
我使用了一个SwingWorker来保持UI响应.组合框使用JIDE's覆盖Overlayable,JIDE InfiniteProgressPanel聆听工作人员.
嗨,如果您将JComboBox放在JTable和String []数组中给JComboBox一切正常.Buf如果您将自己的数据类型放到JComboBox中,则选择同一列中的值会变得复杂.这是官方的例子.尝试更改以下部分:
JComboBox comboBox = new JComboBox();
comboBox.addItem("Snowboarding");
comboBox.addItem("Rowing");
comboBox.addItem("Knitting");
comboBox.addItem("Speed reading");
comboBox.addItem("Pool");
comboBox.addItem("None of the above");
sportColumn.setCellEditor(new DefaultCellEditor(comboBox));
Run Code Online (Sandbox Code Playgroud)
成:
JComboBox comboBox = new JComboBox();
comboBox.addItem(new Test("Snowboarding"));
comboBox.addItem(new Test("Rowing"));
comboBox.addItem(new Test("Knitting"));
comboBox.addItem(new Test("Speed reading"));
comboBox.addItem(new Test("Pool"));
comboBox.addItem(new Test("None of the above"));
sportColumn.setCellEditor(new DefaultCellEditor(comboBox));
Run Code Online (Sandbox Code Playgroud)
并创建新的数据类型:
public class Test {
private String name;
public Test(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
Run Code Online (Sandbox Code Playgroud)
你会看到,当你点击女巫中的表格单元格时,会有一个带有自定义数据类型的JComboBox.自动选择第一列单元格的值.如何解决这个问题?
编辑1:我添加了SSCCE.
主类:
import java.awt.BorderLayout;
public class windw extends …Run Code Online (Sandbox Code Playgroud) 好的我正在使用eclipse及其GUI编辑器,我有一个这样的字符串:
public static String[] blah = {"Blah", "Blah", "Blah", "Blah"};
Run Code Online (Sandbox Code Playgroud)
和这样的JComboBox:
JComboBox comboBox = new JComboBox(blah);
comboBox.setBounds(10, 56, 312, 37);
contentPane.add(comboBox);
Run Code Online (Sandbox Code Playgroud)
组合框使用上面的字符串来获取其数据,但当我输入"blah"到组合框时,它有这个错误...
Type safety: The constructor JComboBox(Object[]) belongs to the raw type JComboBox. References to generic type JComboBox<E> should be parameterized
Run Code Online (Sandbox Code Playgroud)
如果我运行它是有效的,因为它只是一个警告,但它很烦人,因为它不会让我进入设计模式,除非我作出评论.设计模式给出了这个错误......
INVALID SOURCE. No Constructor Binding. --- new JComboBox(locations) is not valid source for component creation, it references not existing constructor.
Run Code Online (Sandbox Code Playgroud)
所以我想知道是否还有其他办法可以解决这个问题
我有一个Java组合框和一个链接到SQLite数据库的项目.如果我有一个带有相关ID和名称的对象:
class Employee {
public String name;
public int id;
}
Run Code Online (Sandbox Code Playgroud)
将这些条目放入JComboBox的最佳方法是什么,以便用户看到员工的姓名,但是当我这样做时我可以检索employeeID:
selEmployee.getSelectedItem();
Run Code Online (Sandbox Code Playgroud)
谢谢
我试图动态验证JComboBox选择的项目,我想取消选择更改,以防验证不正确.有没有办法实现它?
private ItemListener itemListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
if (true) CANCEL_CHANGE;
}
}
};
Run Code Online (Sandbox Code Playgroud)
我尝试定义一个包含旧值的var,取消注册侦听器,并手动选择到先前的状态,但随后第一次更改出现问题,因为var未初始化且无法保存原始值.
我也尝试过使用ActionListener,但发现无法以编程方式取消更改,而且我不需要fire事件然后没有变化,但我正在评估手动设置setSelection的可能性,所以我恢复为ItemListener.
我使用SwingX AutoCompleteDecorator的JComboBox.自动完成功能非常有效......
但是我很难确定最终用户选择的时刻 ; 很少坚持我的数据.
让我试着解释一下:组合框会ActionEvent为每个选择发出一个"comboBoxChanged" .当用户输入字符时,我必须忽略这些事件,并且组合框是自动匹配和选择项目.如果用户点击返回键,ActionEvent则生成"comboBoxEdited" - 我可以保存所选值.太棒了;-)
如果使用鼠标打开JComboBox-PopUp并选择项目,则唯一触发的事件是"comboBoxChanged" - ActionEvent(如自动匹配或使用光标键选择项目时).鼠标点击事件以某种方式被消耗!?这就是我无法识别最终鼠标选择的原因.
我怎么能搞清楚这一点?我在SSCCE中记录了尝试监听mouseClicked-Event的失败尝试:
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator;
public class SearchForThePopUpMouseClick extends JPanel
{
private JComboBox<String> comboBox;
public SearchForThePopUpMouseClick()
{
comboBox = new JComboBox<String>(new String[] { "Anna", "Marc", "Maria", "Marten", "Peter" });
add(comboBox);
add(new JTextField("textfield …Run Code Online (Sandbox Code Playgroud)