gpt4 book ai didi

java - JTable 工作但 JTable 子类不会

转载 作者:行者123 更新时间:2023-11-29 05:08:48 27 4
gpt4 key购买 nike

我有这段代码可以完全按预期工作

package com.grantbroadwater.signInAssistant.view;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

import org.junit.Test;

import com.grantbroadwater.school.Student;

public class SignInSheetTableTest implements ActionListener{

static SignInSheetTableModel model;
static JTextField tfFirst, tfLast;
static JTable table;

public SignInSheetTableTest() {
// TODO Auto-generated constructor stub
}

private static JPanel createContentPanel(){
JPanel panel = new JPanel(new GridLayout(1, 0));

table = new JTable(new SignInSheetTableModel());
model = (SignInSheetTableModel)table.getModel();
table.setPreferredScrollableViewportSize(new Dimension(500, 80));
table.setFillsViewportHeight(true);

JScrollPane scrollPane = new JScrollPane(table);

panel.add(scrollPane);

return panel;
}

private static void createAndShowGUI(){
JFrame frame = new JFrame("Table Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel = SignInSheetTableTest.createContentPanel();
panel.setOpaque(true);

JPanel entryPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
tfFirst = new JTextField(8);
tfLast = new JTextField(8);
JButton btnAdd = new JButton("Add");
btnAdd.addActionListener(new SignInSheetTableTest());
JButton btnDelete = new JButton("Delete");
btnDelete.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
int rowIndex = table.getSelectedRow();
model.deleteRow(rowIndex);
}
});

entryPanel.add(tfFirst);
entryPanel.add(tfLast);
entryPanel.add(btnAdd);
entryPanel.add(btnDelete);

JPanel housingPanel = new JPanel(new BorderLayout());
housingPanel.add(entryPanel, BorderLayout.NORTH);
housingPanel.add(panel, BorderLayout.CENTER);

frame.setContentPane(housingPanel);

frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}

@Override
public void actionPerformed(ActionEvent e) {
String first = tfFirst.getText();
String last = tfLast.getText();

Student s = new Student(first, last, "11111");

model.addStudent(s);

table.scrollRectToVisible(table.getCellRect(table.getRowCount() - 1, 0, true));
}

@Test
public void test(){
main(null);

try {
Thread.sleep(15000);
} catch (InterruptedException e) {}

}

}

但是,当我将 JTable 实例更改为 JTable 的 SignInSheetTable 子类,并将构造函数更改为 new SignInSheetTable() 时,程序仍会执行,但不会执行 JTable会出现。我找不到任何解决方案,而且我完全迷失了为什么当父类(super class)将整个 SignInSheetTable 类如下所示时子类无法工作。

package com.grantbroadwater.signInAssistant.view;

import javax.swing.JTable;

import com.grantbroadwater.school.Student;
import com.grantbroadwater.util.Log;
import com.grantbroadwater.util.Log.LogType;

public class SignInSheetTable extends JTable{

private static final long serialVersionUID = 1L;
private SignInSheetTableModel model;

public SignInSheetTable() {
super(new SignInSheetTableModel());
model = (SignInSheetTableModel) super.getModel();

this.setFillsViewportHeight(true);
new Log(LogType.DEBUG, "new Sign In sheet");
}

public SignInSheetTableModel getModel() {
return model;
}

public void addStudent(Student student) {
model.addStudent(student);
}

public void deleteRow(int rowIndex) {
model.deleteRow(rowIndex);
}

}

最佳答案

重写 getModel 似乎会导致程序的其余部分出现问题。无论如何,这并不是您想要实现的目标所必需的。

就我个人而言,我不会理会自定义表,你不会向类中添加任何新功能,这不能直接通过模型进行管理,无论如何都应该在模型中进行管理

我还担心 static 的过度使用,因为随着程序变大,这可能会给您带来一些问题

关于java - JTable 工作但 JTable 子类不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29453661/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com