我有一个带有默认值的JTable 4x4。用户可以更改JTable大小。将尺寸改为例如。 6x6,清除默认值,用户可以自己键入。如何让他们到一些整数表?我试图从我的模型类中使用getValueAt()和setValueAt()但是在点击其他单元格后,JTable字段总是被清除。
class MyTableModel extends AbstractTableModel {
int size;
private String[] columnNames = { "Stan 1", "Stan 2", "Stan 3", "Stan 4" };
private Object[][] defaultValues = new Object[][] {
{ "5", "15", "10", "0"},
{ "10", "10", "-20", "30"},
{ "40", "0", "50", "-30"},
{ "60", "0", "20", "-10"}};
private Object[][] newData = null;
public MyTableModel(int x) {
size = x;
}
@Override
public int getRowCount() {
return size;
}
@Override
public int getColumnCount() {
return size;
}
@Override
public String getColumnName(int columnIndex) {
if(columnIndex == 0) return null;
else return "Stan " + Integer.toString(columnIndex);
}
@Override
public Class getColumnClass(int columnIndex) {
return Integer.class;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if(size == 4)
return defaultValues[rowIndex][columnIndex];
else {
newData = new Object[size][size];
return newData[rowIndex][columnIndex];
}
}
@Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
if(size == 4)
defaultValues[rowIndex][columnIndex] = value;
else
newData[rowIndex][columnIndex] = value;
fireTableCellUpdated(rowIndex, columnIndex);
}
}
答案 0 :(得分:1)
不需要自定义TableModel或覆盖getValueAt(...)和setValueAt(...)方法。
如果您想更改from tkinter import *
class Application(object):
def __init__(self, event=None):
self.root = Tk()
self.root.configure(bg="darkorchid1", padx=10, pady=10)
self.root.title("WELCOME")
self.username = "Bob"
self.welcome = Label(self.root, text="WELCOME TO MY PROGRAM", bg="lightgrey", fg="darkorchid1")
self.welcome.pack()
self.label0 = Label(self.root, text="ENTER NAME:", bg="purple", fg="white", height=5, width=50)
self.label0.pack()
self.entry = Entry(self.root, width=25)
self.entry.configure(fg= "white",bg="grey20")
self.entry.pack()
self.root.bind("<Return>", self.submit)
self.button = Button(self.root, text="SUBMIT", highlightbackground="green", width=48, command=self.submit)
self.button.pack()
self.button1 = None
self.button2 = None
self.attempts = 0
def submit(self, event=None):
username = self.entry.get()
if username == self.username:
if (self.button2 != None): # after I added disabling the submit button this check might not be necessary
return
if (self.button1 == None):
self.button1 = Button(self.root, text='LOGIN', highlightbackground="green", width=28, command=self.root.destroy)
self.button1.pack()
self.root.bind("<Return>", self.login)
self.button.config(state="disabled")
else:
if (self.button2 == None):
self.button2 = Button(self.root, text="INCORRECT- CLICK TO DIMISS THIS MESSAGE", highlightbackground="red", width=48, command=self.incorrect)
self.button2.pack()
self.root.bind("<Return>", self.incorrect)
self.button.config(state="disabled")
def incorrect(self, event=None):
self.attempts += 1
if (self.attempts > 2):
self.root.destroy()
else:
self.root.bind("<Return>", self.submit)
self.button.config(state="normal")
self.button2.destroy()
self.button2 = None
def login(self, event=None):
self.root.destroy()
app=Application()
mainloop()
中的数据,可以使用DefaultTableModel
方法。