Java 如何将我自己的类型放入表格中
我在java中找到了这个问题的答案,但我不知道如何让它在jython中工作。 有人能帮我翻译一下吗? 我试着自己和Java 如何将我自己的类型放入表格中,java,swing,jtable,jython,Java,Swing,Jtable,Jython,我在java中找到了这个问题的答案,但我不知道如何让它在jython中工作。 有人能帮我翻译一下吗? 我试着自己和 from javax.swing import JFrame,JPanel,JScrollPane,JTable,JButton,JCheckBox,AbstractCellEditor from javax.swing.table import AbstractTableModel,TableCellEditor,TableCellRenderer from java.awt
from javax.swing import JFrame,JPanel,JScrollPane,JTable,JButton,JCheckBox,AbstractCellEditor
from javax.swing.table import AbstractTableModel,TableCellEditor,TableCellRenderer
from java.awt import GridLayout, Dimension
from java.lang import String, Integer, Boolean,Class
from java.util import ArrayList, List
class TableSortDemo:
def __init__(self):
frame = JFrame("TableSortDemo")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
#Create and set up the content pane.
self.table = JTable(MyTableModel())
self.table.setPreferredScrollableViewportSize(Dimension(500, 170))
self.table.setFillsViewportHeight(True)
self.table.setDefaultRenderer(Class.forName("java.lang.Object"), ValueRenderer());
self.table.setDefaultEditor(Class.forName("java.lang.Object"), ValueEditor());
self.table.setAutoCreateRowSorter(True)
#Create the scroll pane and add the table to it.
scrollPane = JScrollPane(self.table);
#Add the scroll pane to this panel.
newContentPane = JPanel()
newContentPane.add(scrollPane);
newContentPane.setOpaque(True) #content panes must be opaque
frame.setContentPane(newContentPane)
#Display the window.
frame.pack();
frame.setVisible(True);
class Value: #implements Comparable<Value> {
def __init__(self,selected, value):
self.selected = selected;
self.value = value;
def compareTo(self,v):
return self.value.compareTo(v.value);
def equals(self,v):
return True # TODO v instanceof Value && this.value.equals(((Value) v).value);
def hashCode(self):
return self.value.hashCode();
class MyTableModel (AbstractTableModel):
MAX = 8;
names = ["Number", "Value"];
values = ArrayList();
for i in range(MAX):
values.add(Value(False, (i + 1) * 1.1));
def getRowCount(self):
return self.MAX;
def getColumnCount(self):
return len(self.names)
def getColumnName(self, col):
return self.names[col];
def getValueAt(self,row,col):
if col == 0:
return row + 1;
elif col == 1:
return values.get(row);
else:
return null;
def getColumnClass(self,col):
if col == 0:
return Integer
elif col == 1:
return Value
else:
return null;
# Don't need to implement this method unless your table's editable.
def isCellEditable(self,row, col):
return col == 1;
def setValueAt(self, aValue, row, col):
if col == 1:
values.get(row).selected = aValue;
self.fireTableCellUpdated(row, col);
class ValueRenderer (TableCellRenderer):
def getTableCellRendererComponent(self, table, value, isSelected, hasFocus, row, col):
v = value;
chkbox = JCheckBox(df.format(v.value))
chkbox.setSelected(v.selected);
if isSelected:
setForeground(table.getSelectionForeground());
setBackground(table.getSelectionBackground());
else:
setForeground(table.getForeground());
setBackground(table.getBackground());
return chkbox;
class ValueEditor (TableCellEditor): #AbstractCellEditor
vr = ValueRenderer();
def ValueEditor():
vr.addItemListener(self);
def getCellEditorValue():
return vr.isSelected();
def getTableCellEditorComponent(table,value,isSelected, row, col):
v = value;
vr.setSelected(v.selected);
vr.setText(df.format(v.value));
return vr;
def itemStateChanged(e):
self.fireEditingStopped();
if __name__ == '__main__':
TableSortDemo()
来自javax.swing导入JFrame、JPanel、JScrollPane、JTable、JButton、JCheckBox、AbstractCellEditor
从javax.swing.table导入AbstractTableModel、TableCellEditor、TableCellRenderer
从java.awt导入GridLayout,维度
从java.lang导入字符串、整数、布尔值、类
从java.util导入ArrayList,列表
类表端口演示:
定义初始化(自):
frame=JFrame(“表端口演示”)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
#创建并设置内容窗格。
self.table=JTable(MyTableModel())
self.table.setPreferredScrollableViewportSize(维度(500170))
self.table.setFillsViewPerthweight(True)
setDefaultRenderer(Class.forName(“java.lang.Object”)、ValueRenderer();
self.table.setDefaultEditor(Class.forName(“java.lang.Object”),ValueEditor());
self.table.setAutoCreateRowSorter(真)
#创建滚动窗格并将表添加到其中。
scrollPane=JScrollPane(self.table);
#将滚动窗格添加到此面板。
newContentPane=JPanel()
添加(滚动窗格);
newContentPane.SetObaque(True)#内容窗格必须是不透明的
frame.setContentPane(newContentPane)
#显示窗口。
frame.pack();
frame.setVisible(True);
类值:#实现可比较{
定义初始值(自身、选定、值):
self.selected=已选择;
自我价值=价值;
def比较器(自身,v):
返回self.value.compareTo(v.value);
def等于(self,v):
返回True#TODO v instanceof Value&&this.Value.equals(((Value)v.Value);
def哈希代码(自身):
返回self.value.hashCode();
类MyTableModel(AbstractTableModel):
最大值=8;
名称=[“数字”、“值”];
values=ArrayList();
对于范围内的i(最大值):
添加(值(假,(i+1)*1.1));
def getRowCount(自身):
返回self.MAX;
def getColumnCount(自身):
返回len(self.names)
def getColumnName(自身,列):
返回self.names[col];
def getValueAt(自身、行、列):
如果col==0:
返回行+1;
elif col==1:
返回值.get(行);
其他:
返回null;
def getColumnClass(自身,列):
如果col==0:
返回整数
elif col==1:
返回值
其他:
返回null;
#除非您的表是可编辑的,否则不需要实现此方法。
def isCellEditable(自身、行、列):
返回col==1;
def setValueAt(自身、aValue、行、列):
如果col==1:
value.get(row).selected=aValue;
自我更新的FireTableCell(行、列);
类ValueRenderer(TableCellRenderer):
def GetTableCellRenderComponent(self、table、value、isSelected、hasFocus、row、col):
v=值;
chkbox=JCheckBox(df.format(v.value))
chkbox.setSelected(v.selected);
如果当选:
setForeground(table.getSelectionForeground());
挫折背景(table.getSelectionBackground());
其他:
set前台(table.get前台());
挫折背景(table.getBackground());
返回chkbox;
类ValueEditor(TableCellEditor):#AbstractCellEditor
vr=ValueRenderer();
def ValueEditor():
vr.addItemListener(自我);
def getCellEditorValue():
返回vr.isSelected();
def GetTableCellEditor组件(表、值、isSelected、行、列):
v=值;
vr.选择的设置(v.选择);
vr.setText(df.format(v.value));
返回虚拟现实;
def itemStateChanged(e):
self.fireEditingStopped();
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
TableSortDemo()
我得到一个空桌子的窗口,并且:
Exception in thread "AWT-EventQueue-0" TypeError: can't convert <class __main__.Value at 0x2> to java.lang.Class
线程“AWT-EventQueue-0”类型中出现异常错误:无法转换为java.lang.Class
堆栈跟踪
编辑(这是工作代码):
from javax.swing import JFrame,JPanel,JScrollPane,JTable,JButton,JCheckBox,AbstractCellEditor
from javax.swing.table import AbstractTableModel,TableCellEditor,TableCellRenderer
from java.awt import GridLayout, Dimension
from java.lang import String, Integer, Boolean,Class,Comparable
from java.util import ArrayList, List
from java.text import DecimalFormat
df = DecimalFormat("#0.00");
class TableSortDemo:
def __init__(self):
frame = JFrame("TableSortDemo")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
#Create and set up the content pane.
self.table = JTable(MyTableModel())
self.table.setPreferredScrollableViewportSize(Dimension(500, 170))
self.table.setFillsViewportHeight(True)
self.table.setDefaultRenderer(Class.forName("java.lang.Object"), ValueRenderer());
self.table.setDefaultEditor(Class.forName("java.lang.Object"), ValueEditor());
self.table.setAutoCreateRowSorter(True)
#Create the scroll pane and add the table to it.
scrollPane = JScrollPane(self.table);
#Add the scroll pane to this panel.
newContentPane = JPanel()
newContentPane.add(scrollPane);
newContentPane.setOpaque(True) #content panes must be opaque
frame.setContentPane(newContentPane)
#Display the window.
frame.pack();
frame.setVisible(True);
class Value(Comparable): #implements Comparable<Value> {
def __init__(self,selected, value):
self.selected = selected;
self.value = value;
def compareTo(self,v):
return cmp(self.value-v.value, 0)
def equals(self,v):
return self.value == v.value
def hashCode(self):
return self.value.hashCode();
class MyTableModel (AbstractTableModel):
MAX = 8;
names = ["Number", "Value"];
values = ArrayList();
for i in range(MAX):
values.add(Value(False, (i + 1) * 1.1));
def getRowCount(self):
return self.MAX;
def getColumnCount(self):
return len(self.names)
def getColumnName(self, col):
return self.names[col];
def getValueAt(self,row,col):
if col == 0:
return row + 1;
elif col == 1:
return self.values[row]
else:
return None
def getColumnClass(self,col):
if col == 0:
return Integer
elif col == 1:
return Value
else:
return None;
# Don't need to implement this method unless your table's editable.
def isCellEditable(self,row, col):
return col == 1;
def setValueAt(self, aValue, row, col):
if col == 1:
self.values.get(row).selected = aValue;
self.fireTableCellUpdated(row, col);
class ValueRenderer (JCheckBox,TableCellRenderer):
def getTableCellRendererComponent(self, table, value, isSelected, hasFocus, row, col):
v = value;
self.text = df.format(v.value)
self.setSelected(v.selected);
if isSelected:
self.setForeground(table.getSelectionForeground());
self.setBackground(table.getSelectionBackground());
else:
self.setForeground(table.getForeground());
self.setBackground(table.getBackground());
return self
class ValueEditor (TableCellEditor,AbstractCellEditor):
def __init__(self):
self.vr = ValueRenderer()
def ValueEditor():
self.vr.addItemListener(self);
def getCellEditorValue(self):
return self.vr.isSelected();
def getTableCellEditorComponent(self,table,value,isSelected, row, col):
v = value;
self.vr.setSelected(v.selected);
self.vr.setText(df.format(v.value));
return self.vr;
def itemStateChanged(self,e):
self.fireEditingStopped();
if __name__ == '__main__':
TableSortDemo()
来自javax.swing导入JFrame、JPanel、JScrollPane、JTable、JButton、JCheckBox、AbstractCellEditor
从javax.swing.table导入AbstractTableModel、TableCellEditor、TableCellRenderer
从java.awt导入GridLayout,维度
从java.lang导入字符串、整数、布尔值、类、可比较
从java.util导入ArrayList,列表
从java.text导入DecimalFormat
df=十进制(“0.00”);
类表端口演示:
定义初始化(自):
frame=JFrame(“表端口演示”)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
#创建并设置内容窗格。
self.table=JTable(MyTableModel())
self.table.setPreferredScrollableViewportSize(维度(500170))
self.table.setFillsViewPerthweight(True)
setDefaultRenderer(Class.forName(“java.lang.Object”)、ValueRenderer();
self.table.setDefaultEditor(Class.forName(“java.lang.Object”),ValueEditor());
self.table.setAutoCreateRowSorter(真)
#创建滚动窗格并将表添加到其中。
scrollPane=JScrollPane(self.table);
#将滚动窗格添加到此面板。
newContentPane=JPanel()
添加(滚动窗格);
newContentPane.SetObaque(True)#内容窗格必须是不透明的
frame.setContentPane(newContentPane)
#显示窗口。
frame.pack();
frame.setVisible(True);
类值(可比):#实现可比{
定义初始值(自身、选定、值):
self.selected=已选择;
自我价值=价值;
def比较器(自身,v):
返回cmp(自值-v值,0)
def等于(self,v):
返回self.value==v.value
def哈希代码(自身):
返回self.value.hashCode();
类MyTableModel(AbstractTableModel):
最大值=8;
名称=[“数字”、“值”];
values=ArrayList();
法罗群岛
from javax.swing import JFrame,JPanel,JScrollPane,JTable,JButton,JCheckBox,AbstractCellEditor
from javax.swing.table import AbstractTableModel,TableCellEditor,TableCellRenderer
from java.awt import GridLayout, Dimension
from java.lang import String, Integer, Boolean,Class,Comparable
from java.util import ArrayList, List
from java.text import DecimalFormat
df = DecimalFormat("#0.00");
class TableSortDemo:
def __init__(self):
frame = JFrame("TableSortDemo")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
#Create and set up the content pane.
self.table = JTable(MyTableModel())
self.table.setPreferredScrollableViewportSize(Dimension(500, 170))
self.table.setFillsViewportHeight(True)
self.table.setDefaultRenderer(Class.forName("java.lang.Object"), ValueRenderer());
self.table.setDefaultEditor(Class.forName("java.lang.Object"), ValueEditor());
self.table.setAutoCreateRowSorter(True)
#Create the scroll pane and add the table to it.
scrollPane = JScrollPane(self.table);
#Add the scroll pane to this panel.
newContentPane = JPanel()
newContentPane.add(scrollPane);
newContentPane.setOpaque(True) #content panes must be opaque
frame.setContentPane(newContentPane)
#Display the window.
frame.pack();
frame.setVisible(True);
class Value(Comparable): #implements Comparable<Value> {
def __init__(self,selected, value):
self.selected = selected;
self.value = value;
def compareTo(self,v):
return cmp(self.value-v.value, 0)
def equals(self,v):
return self.value == v.value
def hashCode(self):
return self.value.hashCode();
class MyTableModel (AbstractTableModel):
MAX = 8;
names = ["Number", "Value"];
values = ArrayList();
for i in range(MAX):
values.add(Value(False, (i + 1) * 1.1));
def getRowCount(self):
return self.MAX;
def getColumnCount(self):
return len(self.names)
def getColumnName(self, col):
return self.names[col];
def getValueAt(self,row,col):
if col == 0:
return row + 1;
elif col == 1:
return self.values[row]
else:
return None
def getColumnClass(self,col):
if col == 0:
return Integer
elif col == 1:
return Value
else:
return None;
# Don't need to implement this method unless your table's editable.
def isCellEditable(self,row, col):
return col == 1;
def setValueAt(self, aValue, row, col):
if col == 1:
self.values.get(row).selected = aValue;
self.fireTableCellUpdated(row, col);
class ValueRenderer (JCheckBox,TableCellRenderer):
def getTableCellRendererComponent(self, table, value, isSelected, hasFocus, row, col):
v = value;
self.text = df.format(v.value)
self.setSelected(v.selected);
if isSelected:
self.setForeground(table.getSelectionForeground());
self.setBackground(table.getSelectionBackground());
else:
self.setForeground(table.getForeground());
self.setBackground(table.getBackground());
return self
class ValueEditor (TableCellEditor,AbstractCellEditor):
def __init__(self):
self.vr = ValueRenderer()
def ValueEditor():
self.vr.addItemListener(self);
def getCellEditorValue(self):
return self.vr.isSelected();
def getTableCellEditorComponent(self,table,value,isSelected, row, col):
v = value;
self.vr.setSelected(v.selected);
self.vr.setText(df.format(v.value));
return self.vr;
def itemStateChanged(self,e):
self.fireEditingStopped();
if __name__ == '__main__':
TableSortDemo()