我正在使用 Eclipse IDE 开发桌面(swing)应用程序。我有三个组合框(国家、州和城市),我需要在选择新的国家或省时自动更新数据。我搜索了很多信息,但我找到的所有实现都是在 Ajax 或 NetBeans 中的 beansbinding 框架上进行的。我尝试了 ItemEvent 的解决方案,但是我在启动我的应用程序时遇到了问题,它加载了国家/地区列表而不是其他列表。并通过选择一个国家来收取州列表而不是城市列表。
我的代码:
jComboBoxCountries.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
jComboBoxStates.setModel(new javax.swing.DefaultComboBoxModel(
statesOf(evt.getItem()).toArray() ));
}
});
jComboBoxStates.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
jComboBoxCities.setModel(new javax.swing.DefaultComboBoxModel(
citiesOf(evt.getItem()).toArray()) );
}
});
jComboBoxCountries.setModel(new javax.swing.DefaultComboBoxModel(
countryList.toArray()));
Run Code Online (Sandbox Code Playgroud) 嗨,我有JComboBox3 个选项,我正在尝试找出actionlistener应用哪个选项,以便在选择一个选项时发生某些事情。目前我的代码是:
comboBoxMode = new JComboBox();
comboBoxMode.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
int selection = comboBoxMode.getSelectedIndex();
switch (selection){
case 0: break;
case 1: enableNormalModeFeatures(); break;
case 2: enableRevisionModeFeatures(); break;
case 3: enableTimerModeFeatures(); break;
}
}
});
comboBoxMode.setModel(new DefaultComboBoxModel(new String[] {"[--Please Select a Mode--]", "Normal", "Revision", "Timer"}));
Run Code Online (Sandbox Code Playgroud)
目的是在选择特定模式时启用页面上的其他选择工具。mouselistener 似乎不起作用。让我感到困惑的是,您实际上必须单击两次才能选择一个选项,但我假设有一些内置代码仅在选择了列表项时才运行?无论如何,任何指针将不胜感激,谢谢大家!
这就是我创建JComboBox的方法 -
String[] options = {"First", "Second" , "Third"};
JComboBox optionsCombo = new JComboBox(options);
Run Code Online (Sandbox Code Playgroud)
选择其中一个项目时,如何获取所选项目的索引?我不希望该项目是所选项目.
我正在尝试删除 JComboBox 中的选定项目(我已添加设计时间)但未执行删除功能。我究竟做错了什么
// jComboBox1.removeAllItems(); working
// jComboBox1.removeItem(jComboBox1.getSelectedItem()); working
jComboBox1.remove(jComboBox1.getSelectedIndex()); not working
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Java JComboBox中听取选择的更改.我曾尝试使用ActionListener,但问题是:动作侦听器执行类似这样的操作
public void actionPerformed(ActionEvent e){
JComboBox<String> source = ((JComboBox<String>)e.getSource());
String selected = source.getItemAt(source.getSelectedIndex());
/*now I compare if the selected string is equal to some others
and in a couple of cases I have to add elements to the combo*/
}
Run Code Online (Sandbox Code Playgroud)
您可以注意到,当我需要向组合添加元素时,另一个事件被触发并且再次调用actionPerformed方法,即使我不想要它,并且代码可能循环... :(有没有办法到只听选择更改而不是一般的更改事件?谢谢
让我首先解释一下我想要实现的目标。我正在 Swing 中创建一个数据输入表单,由许多 JComboBox 和 JTextField 组成。验证例程迭代这些组件并确定为每个控件指定的值是否“有效”(验证的详细信息与本示例的目的无关)。
当例程识别出某个组件包含无效值时,我想更改该字段的背景颜色以及该字段的前景/文本颜色 - 让用户清楚该字段存在问题。
在字段被视为“有效”的情况下,我想将控件的背景设置为白色 - 并将前景/文本设置为黑色。
到目前为止,所有这些都非常简单,并且都可以在下面附加的演示代码中实现。
当组合框包含有效值并且获得焦点时,组合内编辑器的背景将设置为蓝色,我对此非常满意。
但是,我想要实现的是当组合框包含无效值时更改用于突出显示聚焦组合框的颜色。尽管已将组合框的背景颜色更改为粉红色,但如果控件获得焦点,它仍然使用蓝色来指示它获得焦点。
聚焦的无效字段示例: http://postimg.org/image/ne9xgjch3/
尽管我明白这是完全正常的行为,但我想做的是将用于突出显示“无效”字段之一的颜色更改为非聚焦和无效控件所具有的较暗颜色- 这样用户仍然可以看到哪个控件获得焦点,并且它仍然是粉红色的。我明白这可能看起来很小,但我的最终用户坚持认为在聚焦时整个字段保持粉红色(或者更确切地说,不同色调的粉红色)。这就是我的乌托邦,一个集中且“无效”的领域,看起来像这样:
http://postimg.org/image/9793bqcfj/
我尝试扩展 DefaultListCellRenderer 和 BasicComboBoxEditor 类,并将它们分别针对组合框设置为渲染器和编辑器。我的印象是编辑器将是我需要集中注意力的地方,因此在类的 getEditorComponent 方法中,我将返回一个具有适当背景和前景的标签 - 但是在该方法中,我无法知道控件是否具有焦点,因此无法确定应如何格式化返回的标签。此外,一旦我开始针对组合框设置编辑器,我似乎就完全失去了集中控制的能力 - 尽管这可能是因为我缺乏如何实现编辑器的知识。
我也一直在阅读有关 BasicComboBoxUI 的内容,但我遇到的任何解决方案都不是突出的。
请有人好心地为我指明正确的方向,我花了几天时间修补这个问题,这真的开始让我烦恼。请原谅 netbeans 生成的演示代码,它只是为了让我快速拼凑出一个演示。
package com.test;
import java.awt.*;
public class TestForm extends javax.swing.JFrame {
public TestForm()
{
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
cboOne = new javax.swing.JComboBox();
txtOne = new javax.swing.JTextField();
txtTwo = new javax.swing.JTextField();
btnValidate = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); …Run Code Online (Sandbox Code Playgroud) 当我更改Jcombobox中的项目时,我收到此错误,没有什么打破它只是显示此错误,无论如何只是抛出它所以它不显示.一切仍然正常,但如果你想看看代码.我将在下面发布.
错误信息:
java.awt.IllegalComponentStateException: component must be showing on the screen to determine its location
at java.awt.Component.getLocationOnScreen_NoTreeLock(Component.java:2056)
at java.awt.Component.getLocationOnScreen(Component.java:2030)
at sun.lwawt.macosx.CAccessibility$23.call(CAccessibility.java:395)
at sun.lwawt.macosx.CAccessibility$23.call(CAccessibility.java:393)
at sun.lwawt.macosx.LWCToolkit$CallableWrapper.run(LWCToolkit.java:538)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:301)
Run Code Online (Sandbox Code Playgroud)
我的代码,我不知道哪个部分显示所有他们的.
import javax.swing.*;
import java.awt.Dialog.ModalityType;
import java.awt.event.*;
import java.awt.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
public class TouchOn extends JDialog {
private JPanel mainPanel;
public ArrayList Reader(String Txtfile) {
try {
ArrayList<String> Trains = new ArrayList<String>();
int count = 0;
String testing = "";
File file = new …Run Code Online (Sandbox Code Playgroud) 我正在使用 Swing 编写 GUI。我有一个JComboBox使用 aListCellRenderer和 a编写的自定义BasicComboBoxEditor。
在我的getListCellRendererComponent()方法中,我根据项目是否被“选择”(鼠标悬停在上面)来更改列表的颜色,这很好,但我不希望选择在做出选择后更改背景颜色,目前正在这样做。
第一张图片显示了选择之前的界面外观,第二张图片显示了选择之后的界面外观。
如何将“选择”的背景更改为“stockColor”?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.util.Vector;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
import javax.swing.plaf.basic.BasicComboBoxEditor;
public class TFComboBox extends JComboBox{
public static void main(String[] args){
createAndShowGUI();
}
public static void createAndShowGUI(){
JFrame frame = new JFrame("MCVE");
JPanel pane = new JPanel(new BorderLayout());
TFComboBox cb = new …Run Code Online (Sandbox Code Playgroud) 这可能是JComboBox 弹出菜单没有出现的副本,但因为它是一个相当老的问题并且已经有一段时间没有激活了,而且所有的答案都不是解决方案,这对我的问题有帮助。因此我决定创建一个新问题。
问题如下:我收到了一个以前的同事的申请,它不再在我的公司工作了。现在我尝试将 JComboBox 添加到 JPanel。JCombobox 按预期显示,但其行为方式与 Seth 在他的问题中描述的方式相同:
1)第一次点击展开按钮什么也不做。第二次单击突出显示框的内容,但仍然没有出现弹出窗口。
2) 一旦我点击了按钮并赋予它焦点,向上/向下击键就会正确地循环显示条目。
我已将代码分解为我认为所需编程最少的代码,以便出现问题。(正如提到的问题中的一个评论提到提供 SSCCE,这从未发生过)。
现在这是我可以提供的代码:
public static class CreateProjectDialog extends JFrame {
private Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
public CreateProjectDialog() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
int SZ_INCR = 1;
// Passe Fontgröße an Resolution an:
if (size.width > 1920) {
SZ_INCR = 2;
}
// Initialize Glass Layer
final JPanel panelGlass = (JPanel) getGlassPane();
panelGlass.setLayout(null);
panelGlass.setVisible(true);
private static JPanel licBorrowPanel = null;
licBorrowPanel = new JPanel();
licBorrowPanel.setBounds(0, 20, 1000, 500);
licBorrowPanel.setVisible(false);
licBorrowPanel.setBackground(Color.WHITE); …Run Code Online (Sandbox Code Playgroud) 我在设计视图中的 JFrame 中添加了一个 JComboBox,其项目的数据类型默认为字符串:
private javax.swing.JComboBox<String> items;
Run Code Online (Sandbox Code Playgroud)
变量声明会自动添加到 Source 中且无法编辑。有人能告诉我如何更改设计视图中项目的数据类型吗?还是我必须自己在 Source 中创建 JComboBox 组件?
(我使用的是 NetBeans IDE 8.2;Java 版本 1.8)