我有一个带有元素列表的JComboBox.所以程序基本上做的是用户从组合列表中选择一个元素,然后单击一个按钮在文本区域中显示所选元素.
到目前为止,一切都很完美,但问题是在用户点击按钮后我希望组合框返回到第一个元素并显示第一个元素.如何显示组合框的第一个元素...... ????
我必须创建带有箭头的经典组合框,以增加框内的值.我想实现这样的事情:

什么是Java Swing等效的这个组件?
我想要联系ComboBoxes.例如,我有三个组合框,每个组合框都有三个项目(a,b,c).在第一个组合框的开始时,选择"a",第二个"b"和第三个"c".我需要ActionListener为它们制作这样的方式,它以这种方式工作:如果将第二个列表中的选择从"b"更改为"a",则在第一个列表中所选项目自动从"a"变为"b".
我试图以这种方式解决问题:
public class MyComboBoxListener implements ActionListener {
public void actionPerformed(ActionEvent a) {
int i = 0;
int j = 0;
while (a.getSource() != valsListArray.get(i)) {
i++;
}
String selected = valsListArray.get(i).getSelectedItem().toString();
while (selected != valsListArray.get(j).getSelectedItem() && j != i) {
j++;
}
String r = chosenVals[i];// in the beginnig elements are that order a, b, c
valsListArray.get(j).setSelectedItem(chosenVals[i]);
chosenVals[j] = r;
chosenVals[i] = selected;
}
}
Run Code Online (Sandbox Code Playgroud)
但它没有解决问题.
我有一个JCombobox,我在运行时添加一些项目.其中一些很长,我的Jcombobox也长得很长.它位于带有BoxLayout(PAGE_AXIS)的JPanel容器中.我不知道如何阻止成长...
我想知道应该有一个属性overflow,如果它是"123456789",在组合框项目中将显示为"123 ...".
编辑:
我读了你的答案,非常感谢你.但问题是我的JPanel可以调整大小,我需要让它的孩子总是填充父母.所以我无法设置首选大小,因为我的JPanel的大小可以在运行时更改.
而且由于同样的原因,我也无法设置最大大小或使用setPrototypeDisplayValue().
我试图使用其他布局(GroupLayout,BorderLayout),但结果是一样的.
如果你愿意,我可以发布代码,但我认为没有必要.如果你还需要,请告诉我.
刚尝试使用JTextArea单行而不是JCombobox.结果是一样的.当我输入时,它正在增长.
我需要在组合框中添加一个分区符号作为项目.这是小学数学的正式分裂符号(连字符上方和下方的单点).在unicode中,此符号的代码为"00f7".
我试过这段代码:
myComboBox.addItem("\00f7");
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我刚拿到一个方框,然后是'f7'.我知道这段代码适用于添加字符串,因此我必须正确处理unicode部分.
谁能告诉我要改变什么?谢谢!
我正在为JComboBox使用自定义BasicComboBoxRenderer,并且我已经更改了下拉列表项的外观.但是,这些更改也适用于组合框中显示的单个顶部项目(不知道如何调用它).
如果可能的话,我希望顶部项目独立于列表中的其他项目.我还想在聚焦时摆脱顶级项目的蓝色(setFocusable(false)不是我想要的).
我试图使用"渲染器索引"(-1)来影响顶部项目,但它似乎没有帮助.
有任何想法吗?
PS不幸的是我无法添加图像更清晰(没有声誉).
编辑:当我说我希望顶部项目独立于下拉列表中的所有其他项目时,我的意思是总是看起来与其他项目不同.例如,在我的自定义BasicComboBoxRenderer中,我将所选项目设置为具有不同的背景,但此背景也适用于顶部项目(因为所选项目成为组合框的顶部项目).
编辑2:顶部项目=我的意思是组合框显示区域,所以我想影响显示区域显示的项目而不是下拉列表中的第一项.我设法通过在组合框本身和setFocusable(false)上使用setBackground来做到这一点(这不是很有用,因为我想保持焦点机制).但问题是(焦点问题除外)如果我通过自定义的BasicComboBoxRenderer或ListCellRenderer类在列表中的每个项目上设置边框,则在显示区域中显示的项目上会出现相同的边框.所以这里有两个问题:
- 有没有办法区分下拉列表中的项目布局和显示区域中的单个项目?
- 有没有办法在不禁用焦点机制的情况下禁用组合框的焦点颜色,就像我们在按钮上使用setFocusPainted(false)一样?(我还尝试在组合框中添加自定义FocusListener,但是通过focusGained()对背景进行的任何更改仅影响按钮而不影响显示区域中显示的项目.
很抱歉混乱和多次编辑......
我所希望的,在编辑打字的时候的JComboBox,在弹出菜单中的JComboBox中以autumaticaly出现,我这样做,它的工作.但是,当我改变了图标的的箭头按钮在JCombobox工作它没有任何更多的如图片所示
在更改箭头按钮图标之前

更改箭头按钮图标后(弹出窗口永远不会出现,当一个人写入时JCombobox)

这就是我做的:
JTextComponent editor;
/** Creates new form combo */
public combo() {
initComponents();
editor = (JTextComponent) jComboBox1.getEditor().getEditorComponent();
jComboBox1.setEditable(true);
editor.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
char keyChar = e.getKeyChar();
if (jComboBox1.isDisplayable())
{
jComboBox1.setPopupVisible(true);
}
editor.setCaretPosition(editor.getText().length());
// System.out.println("wwwweeeee"+keyChar);
}
});
jComboBox1.setUI(new SynthComboBoxUI() {
protected JButton createArrowButton() {
JButton btn = new JButton();
btn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Image/error3.png")));
return btn;
}
}); …Run Code Online (Sandbox Code Playgroud) 我想创建带有复选框和多个选择的JComboBox.我在渲染jlist后创建了一个带复选框的列表.我不知道如何用jcombobox渲染它.或者是否可以将jlist作为下拉列表组成,如组合框.对于jlist渲染我使用以下代码
DefaultListModel listModel = new DefaultListModel();
ListCheckBox li= new ListCheckBox(listModel);
JScrollPane jsp= new JScrollPane(li);
add(jsp);
listModel.add(0,new JCheckBox("Other Court"));
listModel.add(0,new JCheckBox("Tribunal Court"));
listModel.add(0,new JCheckBox("High Court"));
listModel.add(0,new JCheckBox("Supreme Court"));
Run Code Online (Sandbox Code Playgroud)
ListCheck Box类如下
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
public class ListCheckBox extends JList
{
protected static Border noFocusBorder =
new EmptyBorder(1, 1, 1, 1);
public ListCheckBox(DefaultListModel model)
{
super(model) ;
setCellRenderer(new CellRenderer());
addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
int index = locationToIndex(e.getPoint());
if (index != -1) {
JCheckBox checkbox …Run Code Online (Sandbox Code Playgroud) 我理解如何做到这一点的基础知识.如果我在文本文件中有以下内容:(每个数字代表一个新行,实际上不会在文件中)
依此类推,使用这个问题/答案中的例子,我可以填写一份JComboBox清单.它添加了行的字符串作为combobox选项.
我的问题是我没有使用看起来像上面的文本文件,而是看起来像这样:
这些数字是我以后必须转换为双倍的价格.但是从那个文本文件中,价格将包含在JComboBox我不想发生的事情中.有没有办法指定每一行的第一个字符串?我在文件中每行不会超过2个字符串.
我试着在Java中开始和结束日期,我有1月到12月的月份JCombobox和年度的 JCombobox年份.
首先,我已经转换String了月份编号并使用此代码:
if(month_sands.getSelectedIndex() != -1){
int monthnumber = month_sands.getSelectedIndex() + 1;
if(monthnumber>=9)
{
month=String.valueOf(monthnumber);
}else
{
month="0"+String.valueOf(monthnumber);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个字符串dateString来获取所选月份的第一个和最后一个日期LocalDate,每件事情都运行良好但是当我选择二月份和2017年时它会给我一个例外java.time.DateTimeException: Invalid date 'February 29' as '2017' is not a leap year
获取第一个和最后一个日期的代码是
try {
String dateString = year_sands.getSelectedItem().toString()+"-"+month+"-"+"01";
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.US);
LocalDate date = LocalDate.parse(dateString, dateFormat);
LocalDate startDate=date.withDayOfMonth(1);
LocalDate endDate = date.withDayOfMonth(date.getMonth().maxLength());
start_date=startDate.toString();
end_date=endDate.toString();
System.out.println(start_date);
System.out.println(end_date);
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我不知道有什么问题,请有人帮助我