如何从可调整大小的JTable中获取价值

时间:2017-03-11 20:53:00

标签: java swing jtable resizable getvalue

我有一个带有默认值的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);
}
}

1 个答案:

答案 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方法。