我试图在JTable中实现一个JSpinner的时间,乍一看它工作得很好,但是在失去单元格的焦点之后,已编辑的单元格被设置为“ Thu Jan 01 +
time + UTC 1970”正确设置。如何从时间中删除日期?
这是我的孔SpinnerEditor.class,添加了一些注释。
代码:
public SpinnerEditor(String timeFormat) {
super(new JTextField());
// Default Time I want to Display (1 Hour)
Time date = new Time(3600000);
SpinnerDateModel timeModel = new SpinnerDateModel(date, null, null,Calendar.MINUTE);
spinner = new JSpinner(timeModel);
editorDate = new JSpinner.DateEditor(spinner, timeFormat);
spinner.setEditor(editorDate);
editorDate = ((JSpinner.DateEditor)spinner.getEditor());
// println result : "Thu Jan 01 01:00:00 UTC 1970"
System.out.println(editorDate.getTextField().getValue());
textField = editorDate.getTextField();
textField.addFocusListener( new FocusListener() {
public void focusGained( FocusEvent fe ) {
System.err.println("Got focus");
//textField.setSelectionStart(0);
//textField.setSelectionEnd(1);
SwingUtilities.invokeLater( new Runnable() {
public void run() {
if ( valueSet ) {
textField.setCaretPosition(1);
}
}
});
}
public void focusLost( FocusEvent fe ) {
}
});
textField.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent ae ) {
stopCellEditing();
}
});
}
// Prepares the spinner component and returns it.
public Component getTableCellEditorComponent(
JTable table, Object value, boolean isSelected, int row, int column
) {
if ( !valueSet ) {
spinner.setValue(value);
}
SwingUtilities.invokeLater( new Runnable() {
public void run() {
textField.requestFocus();
}
});
return spinner;
}
public boolean isCellEditable( EventObject eo ) {
System.err.println("isCellEditable");
if ( eo instanceof KeyEvent ) {
KeyEvent ke = (KeyEvent)eo;
System.err.println("key event: "+ke.getKeyChar());
textField.setText(String.valueOf(ke.getKeyChar()));
valueSet = true;
} else {
valueSet = false;
}
return true;
}
// Returns the spinners current value.
public Object getCellEditorValue() {
return spinner.getValue();
}
public boolean stopCellEditing() {
System.err.println("Stopping edit");
// after stopcellEditing is called the TextField is being set with the wrong values (Thu Jan 01 01:00:00 UTC 1970)
super.stopCellEditing();
try {
if( editorNumeric!=null)
{
editorNumeric.commitEdit();
spinner.commitEdit();
}
if( editorDate!=null)
{
SimpleDateFormat lFormat = new SimpleDateFormat("HH:mm");
textField.setText((spinner.getValue() != null) ? lFormat.format(spinner.getValue()) : "");
}
} catch ( java.text.ParseException e ) {
JOptionPane.showMessageDialog(null,
"Invalid value, discarding.");
}
return true;
}
您会混淆编辑器和渲染器。编辑器是在编辑单元格时显示的小部件。当不再编辑单元格时,将使用单元格渲染器“绘制”该单元格。这一切都在本段中说明。我真的建议您阅读它,因为它清楚地说明了表呈现的执行方式。
您应该做的是对相关列使用自定义CellRenderer,以便它使用日期格式程序。
请看一下本教程,以获取有关单元格编辑器和单元格渲染器的更多信息。
介绍 (Introduction) JSpinner类是一个组件,它允许用户使用输入字段从有序序列中选择数字或对象值。 Class 声明 (Class Declaration) 以下是javax.swing.JSpinner类的声明 - public class JSpinner extends JComponent implements Accessible 类构造函数 (C
问题内容: 我正在使用JSpinner输入时间;但是,当我使用getValue方法时,我获得的时间是1970年1月1日,因为这是默认的开始日期。我该如何获取时间,以及独自一人的时间?我对日期不感兴趣 注意:我已经使用了dateEditor。也许我的JSpinnerDateModel不适当? 问题答案: 您可以创建一个JSpinner实例并将其格式化为时间格式,然后在末尾提取时间:
主要内容:1 Java JSpinner的介绍,2 Java JSpinner的声明,3 Java JSpinner的构造方法,4 Java JSpinner的方法,5 Java JSpinner的案例1,6 Java JSpinner的案例21 Java JSpinner的介绍 JSpinner类的对象是单行输入字段,允许用户从有序序列中选择数字或对象值。 2 Java JSpinner的声明 让我们看看javax.swing.JSpinner类的声明。 3 Java JSpinner的构造方
问题内容: 我想更改JSpinner的行为,以便在单击文本时将其选中。这样可以更轻松地将字段替换为所需的值。不幸的是,我无法使该行为起作用,它只是将光标插入文本中,而没有选择已经存在的内容。 我曾尝试通过既向JSpinner本身又向文本区域本身添加了一个焦点侦听器,但这些似乎都没有达到预期的效果。我的代码(针对JSpinner本身)如下: 我不确定是什么问题。如果有关系,我正在运行Mac OS 1
我试图传入一个JTable对象,它有DiscountID和Name列。我基本上是在尝试获取JTable a(折扣ID)中选择的第一列的一行,以及在循环中与JTable B中选择的记录相关的这组数据。 我现在的问题是,因为最初我必须将其设置为0,以避免出现但当我运行程序时,JTable B将显示与JTable A中的第一条记录相关的信息,而不需要我选择任何数据。我不想在JTTable B中显示任何信
我已经建立了一个,并使其包含18列。最初,当它是13列时,它非常适合JTable,并且没有撕裂。然而,一旦我使它包含18个表,并将自动调整大小设置为关闭,当我使用水平滚动条尝试滚动其他列时,JTable的撕裂开始发生,如图所示: Netbeans还开始向我发送大量错误消息,如: 为什么会这样?这个问题有什么解决办法吗?谢谢 真抱歉!下面是用于初始化表的代码。希望会有用!