gpt4 book ai didi

java - 设置 TableCellRenderer 在 `JComboBox` 的值列表顶部添加一个空值

转载 作者:行者123 更新时间:2023-12-01 09:34:28 24 4
gpt4 key购买 nike

SCCEE 在这里:

import java.awt.EventQueue;

import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn;

public class TC extends JFrame{
public TC(){
begin();
}
private void begin(){
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setTitle("nothing.");
String[] options = {"One", "Two", "Three"};
JComboBox<String> combo = new JComboBox<>(options);
JTable table = new JTable(new Object[2][2], new String[]{"One", "Two"});
TableColumn col0 = table.getColumnModel().getColumn(0);
col0.setCellEditor(new DefaultCellEditor(combo));

class MyRender extends DefaultTableCellRenderer {
public MyRender() {
}
@Override
public void setValue(Object value) {
if (value instanceof JComboBox) {
setText(((JComboBox) value).getSelectedItem().toString());
}
}
}

MyRender renderer = new MyRender();
col0.setCellRenderer(renderer);

JScrollPane sp = new JScrollPane(table);
getContentPane().add(sp);

pack();
setVisible(true);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){

@Override
public void run() {
TC tc = new TC();

}

});
}
}

我的问题是:设置 TableCellRenderer 使组合在所有其他值之上选择一个空选项,而没有人告诉它这样做。空条目不知从何而来。

如何让组合在第一时刻选择“One”条目,而不是“”?实现自定义渲染器时我错过了一些东西?我在这里关注:

Oracle tutorial of How to Use Tables - Swing - Java SE

此外,只有单击组合才会显示它。我认为这不是展示它的正确方式。我尝试在这里遵循另一个例子:

Show a JComboBox with custom editor and renderer, example from java2s.com

但我仍然很困惑。

最佳答案

How can I make the combo select the "One" entry at first moment,

这是默认行为。当调用编辑器时,TableModel 中的数据用于选择组合框中的项目。

Using a ComboBox as an Editor 上的 Swing 教程中的部分包含一个演示如何执行此操作的工作示例。

the combo is not shown until I click it

这就是它的设计方式。渲染器正常显示数据。在用户开始编辑单元格之前,编辑器不会显示。

如果您想向用户表明组合框将用作编辑器,那么您需要使用自定义渲染器。您尝试的实现是不正确的,因为您永远不会将 JCombobox 作为表模型中的数据。

查看:How to make a JComboBox table editor have the design of an ordinary JComboBox?对于可能的渲染器的几种不同实现:

  1. 我的示例展示了使用真正的组合框会是什么样子(我不喜欢它)和
  2. 接受的答案显示了更好的渲染器。您可能想要更改示例以使用面板作为带有 BorderLayout 的渲染器。然后,您向 LINE_START 添加标签,向 LINE_END 添加图标,使图标更像右侧带有向下箭头的组合框。

编辑:

but in your link, the combobox is showing the first option

不,不是。再次测试代码。单击第二行或第三行以调用编辑器以查看选择了哪个项目。

为了澄清我之前所说的话。组合框中的项目是根据 TableModel 中的数据选择的。由于您的 TableModel 为空,因此没有可供选择的项目。

将一些数据放入TableModel中。 Swing 教程中的示例和我提供给您的链接中的两个示例都在 TableModel 中包含数据,这就是它们工作的原因。

关于java - 设置 TableCellRenderer 在 `JComboBox` 的值列表顶部添加一个空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39120334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com