Java 编辑时动态增加JTable行高,完成编辑时减少
我正在编写一个小型POS应用程序,它显示一个JTable,其单元格中包含票证信息。CellRenderer是一个扩展JPanel并实现TableCellRenderer的类,它包含几个显示基本信息(数量、描述、价格)的JTextFields。 另外,我还有一个类扩展了JPanel并实现了TableCellEditor,它被用作CellEditor。这个类包含更多的JTextFields和一些jbutton 我需要的很简单:当我用鼠标点击(或触摸屏幕,据我所知,这是同一事件)编辑任何单元格时,动态地增加我要编辑的单元格的高度,这样它就可以显示编辑器中的所有组件。当我完成编辑时,将单元格高度返回到它以前的值 你有什么想法吗Java 编辑时动态增加JTable行高,完成编辑时减少,java,swing,jtable,tablecellrenderer,tablecelleditor,Java,Swing,Jtable,Tablecellrenderer,Tablecelleditor,我正在编写一个小型POS应用程序,它显示一个JTable,其单元格中包含票证信息。CellRenderer是一个扩展JPanel并实现TableCellRenderer的类,它包含几个显示基本信息(数量、描述、价格)的JTextFields。 另外,我还有一个类扩展了JPanel并实现了TableCellEditor,它被用作CellEditor。这个类包含更多的JTextFields和一些jbutton 我需要的很简单:当我用鼠标点击(或触摸屏幕,据我所知,这是同一事件)编辑任何单元格时,动态
提前感谢。:-) 没有尝试过,但我想说实现的
mouseClicked()
方法才是最好的选择。跟踪单元格高度是否已增加,并相应更改高度
由于MouseListener
是一个接口,CellRenderer
也可以实现这个接口,将所有单元格行为保持在一个类中
CellRenderer是一个扩展JPanel并实现TableCellRenderer的类,它包含几个显示基本信息(数量、描述、价格)的JTextFields。另外,我还有一个类扩展了JPanel并实现了TableCellEditor,它被用作CellEditor。这个类包含更多的JTextFields和一些jbutton
更好的方法是基于jpopmenu
中的事件创建弹出窗口(JDialog
)
编辑时动态增加JTable行高,完成编辑时减少
不要混淆用户,在屏幕上跳转JTables行
可能会导致错误的概念
我需要的很简单:当我用鼠标点击(或触摸屏幕,据我所知,这是同一事件)编辑任何单元格时,动态地增加我要编辑的单元格的高度,这样它就可以显示编辑器中的所有组件。当我完成编辑时,将单元格高度返回到它以前的值
不要这样做,但必须覆盖,这是可能的
用于defaultcelldeditor\setClickCountToStart(int)
tablecelldeditor
单元格编辑器的
、开始
和停止
取消编辑
- 必须
或通知
重新布局
,在JTable
和停止
取消编辑
不,mouseListener不是您想要的:编辑可以通过多种方式启动(包括鼠标、键盘、编程等)。问题是“当我用鼠标单击编辑任何单元格时”,因此我认为这是唯一需要这种行为的情况。事实上,当所有形式的编辑都需要这种行为时,
MouseListener
并不是一条好路。欢迎来到模糊问题的现实:-)认真地说:不完整的问题不是不完整答案的借口。。。在GUI开发中,这不是简单的选择(至少)鼠标和键盘作为用户模板。同意@mKorbel的观点,即跳跃的划船高度可能会激怒用户。是否可以选择只对编辑组件进行过大处理(即使其覆盖的区域大于其正常单元格区域)?是的,将需要CellEditor
;也考虑一下。
// fake a bigger editing component
JTextField oversized = new JTextField() {
@Override
public Dimension getPreferredSize() {
Dimension dim = super.getPreferredSize();
dim.height *= 5;
return dim;
}
};
TableCellEditor editor = new DefaultCellEditor(oversized);
JTable table = new JTable(new AncientSwingTeam()) {
@Override
public boolean editCellAt(int row, int column, EventObject e) {
boolean result = super.editCellAt(row, column, e);
if (result) {
// adjust cell bounds of the editing component
Rectangle bounds = getEditorComponent().getBounds();
bounds.height = getEditorComponent().getPreferredSize().height;
getEditorComponent().setBounds(bounds);
}
return result;
}
@Override
public void removeEditor() {
int editingColumn = getEditingColumn();
super.removeEditor();
if (editingColumn >= 0) {
// cleanup
repaint();
}
}
};
table.getColumnModel().getColumn(0).setCellEditor(editor);