- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 DoubleEditor
,它是根据从网上获取的 Integer Editor
进行修改的。我使用它来验证在 JXTable
单元格中输入的 double 值,该值旨在获取 0.00
到 100.00
之间的值。但是,我有一个奇怪的问题:如果我在单元格中输入 1.999
,我按 Enter 键什么也不会发生。 (我希望它将其转换为 2.00
)。如果我单击编辑值为 1.999 的单元格,它就会执行转换。如果我输入 1.9999
它会立即执行转换!
我需要此编辑器执行以下操作:1) 将我的值表示为 10.00
,2) 任何输入的值必须四舍五入为 2d.p
这是代码:
public class DoubleEditor extends DefaultCellEditor {
JFormattedTextField ftf;
DecimalFormat doubleFormat;
private Double minimum, maximum;
private boolean DEBUG = false;
public DoubleEditor(double min, double max) {
super(new JFormattedTextField());
ftf = (JFormattedTextField) getComponent();
minimum = new Double(min);
maximum = new Double(max);
//Set up the editor for the integer cells.
doubleFormat = new DecimalFormat("###.##");//Setting out the formatter here
doubleFormat.setMaximumFractionDigits(2);//2dp
NumberFormatter doubleFormatter = new NumberFormatter(doubleFormat);
doubleFormatter.setFormat(doubleFormat);
doubleFormatter.setMinimum(minimum);
doubleFormatter.setMaximum(maximum);
ftf.setFormatterFactory(
new DefaultFormatterFactory(doubleFormatter));
ftf.setValue(minimum);
ftf.setHorizontalAlignment(JTextField.CENTER);
ftf.setFocusLostBehavior(JFormattedTextField.PERSIST);
//React when the user presses Enter while the editor is
//active. (Tab is handled as specified by
//JFormattedTextField's focusLostBehavior property.)
ftf.getInputMap().put(KeyStroke.getKeyStroke(
KeyEvent.VK_ENTER, 0),
"check");
ftf.getActionMap().put("check", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (!ftf.isEditValid()) { //The text is invalid.
if (userSaysRevert()) { //reverted
ftf.postActionEvent(); //inform the editor
}
} else {
try { //The text is valid,
ftf.commitEdit(); //so use it.
ftf.postActionEvent(); //stop editing
} catch (java.text.ParseException exc) {
}
}
}
});
}
//Override to invoke setValue on the formatted text field.
@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected,
int row, int column) {
JFormattedTextField ftf
= (JFormattedTextField) super.getTableCellEditorComponent(
table, value, isSelected, row, column);
ftf.setValue(value);
return ftf;
}
//Override to ensure that the value remains an Double.
@Override
public Object getCellEditorValue() {
JFormattedTextField ftf = (JFormattedTextField) getComponent();
Object o = ftf.getValue();
if (o instanceof Double) {//Watch out !!!
return o;
} else if (o instanceof Number) {
return new Double(((Number) o).doubleValue());
} else {
if (DEBUG) {
System.out.println("getCellEditorValue: o isn't a Number");
}
try {
return doubleFormat.parseObject(o.toString());
} catch (ParseException exc) {
System.err.println("getCellEditorValue: can't parse o: " + o);
return null;
}
}
}
//Override to check whether the edit is valid,
//setting the value if it is and complaining if
//it isn't. If it's OK for the editor to go
//away, we need to invoke the superclass's version
//of this method so that everything gets cleaned up.
@Override
public boolean stopCellEditing() {
JFormattedTextField ftf = (JFormattedTextField) getComponent();
if (ftf.isEditValid()) {
try {
ftf.commitEdit();
} catch (java.text.ParseException exc) {
}
} else { //text is invalid
if (!userSaysRevert()) { //user wants to edit
return false; //don't let the editor go away
}
}
return super.stopCellEditing();
}
/**
* Lets the user know that the text they entered is bad. Returns true if the
* user elects to revert to the last good value. Otherwise, returns false,
* indicating that the user wants to continue editing.
*/
protected boolean userSaysRevert() {
Toolkit.getDefaultToolkit().beep();
ftf.selectAll();
Object[] options = {"Edit",
"Revert"};
int answer = JOptionPane.showOptionDialog(
SwingUtilities.getWindowAncestor(ftf),
"The value must be an integer between "
+ minimum + " and "
+ maximum + ".\n"
+ "You can either continue editing "
+ "or revert to the last valid value.",
"Invalid Text Entered",
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE,
null,
options,
options[1]);
if (answer == 1) { //Revert!
ftf.setValue(ftf.getValue());
return true;
}
return false;
}
}
这段代码有什么问题?
最佳答案
根据@trashgod 的评论,我找到了答案。我现在没有错过Table Cell Renderer
,而是专注于Editor
。我了解到这两件事的工作原理不同,用途也不同。答案基于Advice welcomed on creating my own Swing component .
我的自定义呈现器,用于采用双值的列。
public class DoubleRenderer extends DefaultTableCellRenderer {
DecimalFormat df;
public DoubleRenderer(DecimalFormat df) {
this.df = df;
this.setHorizontalAlignment(JLabel.CENTER);
this.setBackground(Color.lightGray);
this.df.setParseBigDecimal(true);
}
@Override
protected void setValue(Object value) {
setText((value == null) ? "" : df.format(value));
}
}
关于java - JTable 单元格上双值编辑器的 "Odd"行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45834334/
query("SELECT id, look, username, motto FROM users WHERE rank = '7'"); if($query->num_rows > 0):
这个问题在这里已经有了答案: Why does integer division yield a float instead of another integer? (4 个答案) 关闭 1 年前。
面试中被问到的问题: 给定一个数组。任务是排列数组: 奇数元素占据奇数位置,偶数元素占据偶数位置。 - 元素的顺序必须保持不变。 考虑从零开始的索引。 按条件打印后,若有剩余,则原样打印剩余元素。 例
首先,抱歉英语不是我的第一语言。 *(偶数和奇数是根据索引) 我想在移动 View 中实现此表。 我尝试过的 Content 1 Head Content 2
我有一个包含多行的表格 - 我为每一行分配了一个悬停功能。如果所选的 TR 是奇数还是偶数,我想在悬停函数中找出什么。 我使用了这段代码: alert(tr.is(":odd")); 不幸的是,它不起
我有一个奇怪的。我无法使用以下内容创建表: 数据库中已经存在表Users,只需添加UserTimeZones,但会失败。 CREATE TABLE `Users` ( `AccessFailed
我们在类里面学习数组,我被分配了这个编程项目。到目前为止,我已经编写了下面的代码,但我对如何让它正常工作感到困惑。我应该为我的代码使用带有 System.out.println 语句的 for 循环。
但是,如果 67 在原始数组中出现两次,它也需要在新数组中出现两次。 我试图解决this coding challenge通过创建频率图,然后将具有偶数值的键插入最终数组: function oddO
在我的 C++ 中学习复制构造函数等的使用。我们得到了一个我们要完成的程序模板,但是我的输出在我的输出流中抛出了时髦的 asci 字符。 这是我的主要类(class): #include using
我的主要问题是设置 JFrame 时的以下代码: public Frame(){ JPanel panel = new JPanel(); add(panel); panel.setPre
我正在开发一个 iOS 应用程序,我的 AVQueuePlayer 导致了问题。播放时出现此错误: RTCReporting: resolve from https://qtpartners.appl
我正在开发一个 3 选项卡的 iPhone 应用程序,我希望每个选项卡的 View 看起来共享相同的 map 。所以目前,我只是想弄清楚当单击新选项卡时如何重置每个 View 的 MKMapView
我正在尝试将文本渲染为非矩形的形状。以下代码在添加矩形路径时有效,但在添加椭圆路径时无效。最终,我想绘制任何路径(L 形等),有人对此有运气吗? -(void)drawRect:(CGRect)rec
这个问题在这里已经有了答案: Can I combine :nth-child() or :nth-of-type() with an arbitrary selector? (8 个答案) 关闭
鉴于我只想选择频率,我正在尝试计算逆 FFT。以下是我进行 FFT 的方法: final double[] points = reader.readPoints(); final DoubleFFT_
我是 scheme 的初学者,有人可以给我一些关于如何获取“列表中奇数位置的元素”的想法吗?所以 ( A B C D G ) 返回 ( G C A)。我得到了相反的列表,我现在需要拉出所有其他数字。请
我试图让底部图表的宽度与月份的长度成正比。 但是,我最终得到了 我有 2 层图表,第 1 层有一个更大的图,占据了一整行,另一个有 12 个图,占据了整个第二行。 对于第二行图,我希望它们的宽度与月份
我对递归概念有一点困难。 给定一个具有整数值的 LinkedList L1 = (2->1->4->6->3) L2= (1->9->6->3) 该函数应从整数 N 开始的链表中删除奇数,并返回对新
我有一个动态生成的 div 列表,并且我有这个脚本来制作交替背景颜色 - 为了 IE。 .box { height:30px; width:100px; background-color:#fff;
我有一个 DoubleEditor,它是根据从网上获取的 Integer Editor 进行修改的。我使用它来验证在 JXTable 单元格中输入的 double 值,该值旨在获取 0.00 到 10
我是一名优秀的程序员,十分优秀!