- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个自定义单元格编辑器,它附加到我的 JTable 列之一。该编辑器具有 JComboBox 或 JTextField 作为组件。但是,当我手动编辑组合框的值并按“tab”时,新的(最新的)值不会附加到 JTable 单元格。相反,旧值将被替换。 (我已经使用另一个代码模板实现了“选项卡”行为,但这通常有效,因为所有其他表格单元格都已正确更新)
导致问题的组合框设置在“case C”中。如果用户现在选择项目“Infinity”,则该值将成功附加到 JTable。但是,如果用户在 JTable 中手动输入一个值并按“tab”,则新值将被丢弃,旧值将再次呈现在表中。但是,作为修补程序,如果用户在组合框中输入值,并在然后选项卡后立即点击“ENTER”,则该值将通过 jtable 正确写入!
我的自定义单元格编辑器实现如下所示:
public class CustomCellEditor extends AbstractCellEditor implements TableCellEditor {
JFrame mParent = null;
JFrame mPopup = null;
String className = "";
protected int clickCountToStart = 2;
private TableCellEditor mEditor = null;
private JComboBox mComboBox = null;
public CustomCellEditor(JFrame parent, String className, JComboBox comboBox) {
mParent = parent;
mClassName = className;
mComboBox = comboBox;
}
@Override
public Component getTableCellEditorComponent(final JTable table, final Object value, final boolean isSelected, final int row, final int column) {
if ( className.equals("case A") ) {
mComboBox.setModel( new DefaultComboBoxModel(Constants.YES_NO_ARRAY) );
mComboBox.setEditable(false);
mEditor = new DefaultCellEditor(mComboBox);
}
else if ( className.equals("case B") ) {
mComboBox.setModel( new DefaultComboBoxModel(Constants.LANG_ARRAY) );
mComboBox.setEditable(false);
mEditor = new DefaultCellEditor(mComboBox);
}
else if ( className.equals("case C") ) {
// THIS is the case, when the Jcombobox become editable, so beside the pre-defined item "Constants.INFIINITY" any arbitrary input should be allowed!
mComboBox.setModel ( new DefaultComboBoxModel(new String[]{Constants.INFINITY}) ) ;
mComboBox.setEditable(true);
mEditor = new DefaultCellEditor(mComboBox);
}
else {
mEditor = new DefaultCellEditor(new JTextField());
}
return mEditor.getTableCellEditorComponent(table, value, isSelected, row, column);
}
/**
* Returns true if <code>anEvent</code> is <b>not</b> a
* <code>MouseEvent</code>. Otherwise, it returns true
* if the necessary number of clicks have occurred, and
* returns false otherwise.
*
* @param anEvent the event
* @return true if cell is ready for editing, false otherwise
* @see #setClickCountToStart
* @see #shouldSelectCell
*/
@Override
public boolean isCellEditable(EventObject anEvent) {
if (anEvent instanceof MouseEvent) {
return ((MouseEvent)anEvent).getClickCount() >= clickCountToStart;
}
return true;
}
@Override
public Object getCellEditorValue() {
if (mEditor != null) {
return mEditor.getCellEditorValue();
}
return null;
}
}
有人知道在“情况 C”的情况下我没有得到最多原因值而是得到上一个表值的原因是什么吗?
谢谢
最佳答案
这里是一个示例,允许您使用不同的编辑器而无需创建自定义编辑器。它重写了 JTable 的 getCellEditor(...)
方法:
import java.awt.*;
import java.util.List;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;
public class TableComboBoxByRow extends JPanel
{
List<String[]> editorData = new ArrayList<String[]>(3);
public TableComboBoxByRow()
{
setLayout( new BorderLayout() );
// Create the editorData to be used for each row
editorData.add( new String[]{ "Red", "Blue", "Green" } );
editorData.add( new String[]{ "Circle", "Square", "Triangle" } );
editorData.add( new String[]{ "Apple", "Orange", "Banana" } );
// Create the table with default data
Object[][] data =
{
{"Color", "Red"},
{"Shape", "Square"},
{"Fruit", "Banana"},
{"Plain", "Text"}
};
String[] columnNames = {"Type","Value"};
DefaultTableModel model = new DefaultTableModel(data, columnNames);
JTable table = new JTable(model)
{
// Determine editor to be used by row
public TableCellEditor getCellEditor(int row, int column)
{
int modelColumn = convertColumnIndexToModel( column );
if (modelColumn == 1 && row < 3)
{
JComboBox<String> comboBox1 = new JComboBox<String>( editorData.get(row));
return new DefaultCellEditor( comboBox1 );
}
else
return super.getCellEditor(row, column);
}
};
JScrollPane scrollPane = new JScrollPane( table );
add( scrollPane );
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("Table Combo Box by Row");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new TableComboBoxByRow() );
frame.setSize(200, 200);
frame.setLocationByPlatform( true );
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
您的逻辑会有所不同,因为您将编辑器基于单元格中数据的类,但基本概念可以是相同的。
关于Java Swing : Custom Cell Editor does not return most recent value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24732840/
我想在显示 View 中显示最新的帖子,并在边栏中显示接下来的五个最新帖子。 目前,我显示的是最新帖子,但侧边栏中包含该帖子以及接下来的4个最新帖子。 Controller : def show
VS Code确实不是最好的Java编译器(好吧,它或许都不该算是个编译器),在使用的过程完全依赖咱们自己写一些配置或者使用一些插件,但是因为它外观好看,我还是比较喜欢用这个。哪怕遇到的问题比别的编
今天,Visual Studio Code 开始向我展示一个弹出窗口: Java 11 or more recent is required to run. Please download and i
我不知道为什么会发生这种情况,即使我单击,它也不会出现任何打字光标,所以我无法编辑任何内容。我运行的是 Windows 10 和 Python 3.4.4。有人知道为什么会发生这种情况吗? Canno
我的应用程序的许多用户报告说,在运行 Froyo 2.2 的 Nexus One 上,当您长按主页按钮时,该应用程序会多次出现在“最近使用的应用程序”列表中。 就我个人而言,我无法重现该问题。已尝试使
如何让 WP 侧边栏中的“最近的帖子”仅显示来自特定类别的帖子? 最佳答案 使用 Otto 的 php 代码小部件之一制作自己最近的帖子小部件可能最容易http://wordpress.org/ext
我在 SQL Server 2000 数据库中有两个表,由父子关系连接。在子数据库中,唯一键由父 ID 和日期戳组成。 我需要对这些表进行连接,以便只连接每个子项的最新条目。 谁能给我任何提示,我该怎
我有一个我正在处理的项目列表,其中一些不再相关。我希望能够从 Xcode 启动时显示的“Recents”列表中删除它们。 如何从“最近”列表中删除项目? 请告诉我 最佳答案 您可以通过文件菜单中的"f
下面是我为从我的应用程序中选择文件而编写的代码 Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); intent.setT
我有一个 WidgetResultActivity 和一个 NotificationResultActivity,我设置了它们的 launchmode=singleInstance。但是它们有不同的行
我正在创建一个网站,用户可以在其中创建相册、创建事件、上传视频等。我想要做的是列出给定用户的最近事件列表。这是我的表格的一个小轮廓: **videos** id user_id uploaded **
我有一个表,其中包含各种服务器的日志条目。我需要为每个 idServer 创建一个包含最新(按时间)日志条目的 View 。 mysql> describe serverLog; +---------
我有一个日程表,我可以在其中使用 recurring_id 数据将某些事件分组为同一事件。问题是我只需要在按 recurring_id 分组的事件列表中获取一个事件(最近的一个),但如果 recurr
我有一个基于文档的 iOS 应用程序,它采用了 iOS 11 的 UIDocumentBrowserViewController。并且声明了自己的文档类型,是一个符合com.apple.package
我正在创建一个自定义启动器,用作手机的信息亭模式。这意味着大部分内容都被隐藏起来,但允许用户访问某些应用程序。我注意到,当我从“最近的应用程序”列表中启动应用程序时,当我按下后退按钮时,会出现常用启动
我认为存在一个树算法来满足我现在正在寻找的东西,但我忘记了它的名字,谷歌搜索也无济于事。 我正在寻找一种具有最佳数据查找性能的算法。特征:- 预计每次查找都会成功。所以查找的所有键都存在(可能有一些遗
例如,如果我的数据是这样的: timestamp | message100 | hello101 | world102 | foo103 | bar104 | baz 如何按升序选择最近的三行(102
我正在尝试实现 dropBox 同步,并且需要比较两个文件的日期。一个在我的 dropBox 帐户上,一个在我的 iPhone 上。 我想出了以下方法,但得到了意想不到的结果。我想在比较这两个日期时我
题目地址:https://leetcode.com/problems/number-of-recent-calls/description/ 题目描述 Write a class RecentCo
每次单击“运行方式”按钮时,都会收到以下消息。 “选品无法推出,近期也没有推出。” 如果我选择“运行方式”按钮附近的下拉箭头,然后选择“新配置”选项(这是我设置为使用本地主机启动的配置)......它
我是一名优秀的程序员,十分优秀!