我正在努力避免使用多个JTable重复数据。基本上我有一个TableModel,它有一个数据的arraylist和一个字符串[]头。
到目前为止没有什么新东西。现在我有了另一个TableModel,它具有相同的数据数组列表,但具有不同的字符串[]标头。
我无法使我的代码正常工作。我很想知道如何跨多表模型共享数据的arrayList。
因此,当我更改数据时,所有模型都会更新,不会出现数据重复。我想避免复制arraylist任何想法,还是我的设置有误?我确实尝试了listener,但我认为这样我们仍然可以跨表模型复制数据。
public class GymTableModel extends AbstractTableModel {
private final ResourceBundle name = ResourceBundle.getBundle("labels/TableLabel", Locale.getDefault());
private final String[] entete = {
name.getString("LNAME"),
name.getString("FNAME"),
name.getString("CONTACT"),
name.getString("TELFIX"),
name.getString("TELGSM"),
name.getString("EMAIL"),
name.getString("BDATE"),
name.getString("EDATE"),
name.getString("LICENSE"),
name.getString("AGE"),
name.getString("ANCIEN")
};
@Override
public Class<?> getColumnClass(int columnIndex){
switch(columnIndex){
case 6:
return Date.class;
case 7:
return Date.class;
case 9:
return Integer.class;
default:
return Object.class;
}
}
@Override
public int getRowCount() {
return gymList.size();
}
@Override
public int getColumnCount() {
return entete.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
switch(columnIndex){
case 0:
return gymList.get(rowIndex).getLastName();
case 1:
return gymList.get(rowIndex).getFirstName();
case 2:
return gymList.get(rowIndex).getContact();
case 3:
return gymList.get(rowIndex).getTelFix();
case 4:
return gymList.get(rowIndex).getTelGsm();
case 5:
return gymList.get(rowIndex).getEmail();
case 6:
return gymList.get(rowIndex).getDateBirth();
case 7:
return gymList.get(rowIndex).getDateClub();
case 8:
return gymList.get(rowIndex).getLicence();
case 9:
return gymList.get(rowIndex).getAge();
case 10:
return gymList.get(rowIndex).getAnciennete();
default:
return null; // should never happen;
}
}
public String getColumnName(int columnIndex){
return entete[columnIndex];
}
}
现在我有另一个表,它有相同的数据,但只有3列(LNAME、FNAME和AGE),所以getClonClass不一样。问题是,我可以与另一个表模型共享我的操列表数据(这是一个数组列表)吗?谢谢
我使用了一个存储所有行的表模型,另一个表模型仅存储学生详细信息,第三个表模型存储人员详细信息。他们都从同一个源获取数据,但每个表的列显示不同。
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
public class AllTableExample {
private JTabbedPane tabbedPane;
private JTable allTable;
private JTable studentTable;
private JTable staffTable;
public AllTableExample() {
setData();
allTable = new JTable();
studentTable = new JTable();
staffTable = new JTable();
}
public void createUI() {
JFrame frame = new JFrame();
tabbedPane = new JTabbedPane();
tabbedPane.add("All", getAllTablePanel());
tabbedPane.add("Student", getStudentTablePanel());
tabbedPane.add("Staff", getStaffTablePanel());
frame.add(tabbedPane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Table Model Example.");
frame.pack();
frame.setVisible(true);
}
private void setData() {
List<TableData> data = new ArrayList<TableData>();
data.add(new TableData("John1", "A", "Maths", "Hellen1"));
data.add(new TableData("John2", "A", "Maths", "Hellen2"));
data.add(new TableData("John3", "A", "Maths", "Hellen3"));
data.add(new TableData("John4", "A", "Maths", "Hellen4"));
data.add(new TableData("John5", "A", "Maths", "Hellen5"));
MainDataClass.getInstance().setData(data);
}
private JPanel getAllTablePanel() {
JPanel panel = new JPanel();
JTable table = new JTable(new AllTableModel());
JScrollPane scroll = new JScrollPane(table);
panel.add(scroll);
return panel;
}
private JPanel getStudentTablePanel() {
JPanel panel = new JPanel();
JTable table = new JTable(new StudentTableModel());
JScrollPane scroll = new JScrollPane(table);
panel.add(scroll);
return panel;
}
private JPanel getStaffTablePanel() {
JPanel panel = new JPanel();
JTable table = new JTable(new StaffTableModel());
JScrollPane scroll = new JScrollPane(table);
panel.add(scroll);
return panel;
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
new AllTableExample().createUI();
}
};
EventQueue.invokeLater(r);
}
}
class AllTableModel extends AbstractTableModel {
List<TableData> tableData = new ArrayList<TableData>();
Object[] columnNames = {"Name", "Grade", "Subject", "Staff"};
public AllTableModel() {
tableData = MainDataClass.getInstance().getData();
}
@Override
public String getColumnName(int column) {
return columnNames[column].toString();
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return tableData.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
TableData data = tableData.get(rowIndex);
switch (columnIndex) {
case 0:
return data.getName();
case 1:
return data.getGrade();
case 2:
return data.getSubject();
case 3:
return data.getStaff();
default:
return null;
}
}
}
class StudentTableModel extends AbstractTableModel {
List<TableData> tableData = new ArrayList<TableData>();
Object[] columnNames = {"Name", "Grade"};
public StudentTableModel() {
tableData = MainDataClass.getInstance().getData();
}
@Override
public String getColumnName(int column) {
return columnNames[column].toString();
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return tableData.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
TableData data = tableData.get(rowIndex);
switch (columnIndex) {
case 0:
return data.getName();
case 1:
return data.getGrade();
default:
return null;
}
}
}
class StaffTableModel extends AbstractTableModel {
List<TableData> tableData = new ArrayList<TableData>();
Object[] columnNames = {"Subject", "Staff"};
public StaffTableModel() {
tableData = MainDataClass.getInstance().getData();
}
@Override
public String getColumnName(int column) {
return columnNames[column].toString();
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return tableData.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
TableData data = tableData.get(rowIndex);
switch (columnIndex) {
case 0:
return data.getSubject();
case 1:
return data.getStaff();
default:
return null;
}
}
}
class TableData {
private String name;
private String grade;
private String subject;
private String staff;
public TableData(String name, String grade, String subject, String staff) {
super();
this.name = name;
this.grade = grade;
this.subject = subject;
this.staff = staff;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getStaff() {
return staff;
}
public void setStaff(String staff) {
this.staff = staff;
}
}
class MainDataClass {
private static MainDataClass mainDataClass;
private List<TableData> data;
private MainDataClass() {
}
public static MainDataClass getInstance() {
if(null == mainDataClass) {
mainDataClass = new MainDataClass();
}
return mainDataClass;
}
public List<TableData> getData() {
return data;
}
public void setData(List<TableData> data) {
this.data = data;
}
}
编辑-2:
参考@camickr关于只使用一种模型的解释,我尝试了这一种,并且成功了。使用removeColumn方法它就像一个魔咒。
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
public class AllTableExample {
private JTabbedPane tabbedPane;
private JTable allTable;
private JTable studentTable;
private JTable staffTable;
private AllTableModel allTableModel;
public AllTableExample() {
allTable = new JTable();
studentTable = new JTable();
staffTable = new JTable();
allTableModel = new AllTableModel();
}
public void createUI() {
JFrame frame = new JFrame();
tabbedPane = new JTabbedPane();
tabbedPane.add("All", getAllTablePanel());
tabbedPane.add("Student", getStudentTablePanel());
tabbedPane.add("Staff", getStaffTablePanel());
frame.add(tabbedPane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Table Model Example.");
frame.pack();
frame.setVisible(true);
}
private JPanel getAllTablePanel() {
JPanel panel = new JPanel();
JTable table = new JTable(allTableModel);
JScrollPane scroll = new JScrollPane(table);
panel.add(scroll);
return panel;
}
private JPanel getStudentTablePanel() {
JPanel panel = new JPanel();
JTable table = new JTable(allTableModel);
table.removeColumn(table.getColumn("Subject"));
table.removeColumn(table.getColumn("Staff"));
JScrollPane scroll = new JScrollPane(table);
panel.add(scroll);
return panel;
}
private JPanel getStaffTablePanel() {
JPanel panel = new JPanel();
JTable table = new JTable(allTableModel);
table.removeColumn(table.getColumn("Name"));
table.removeColumn(table.getColumn("Grade"));
JScrollPane scroll = new JScrollPane(table);
panel.add(scroll);
return panel;
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
new AllTableExample().createUI();
}
};
EventQueue.invokeLater(r);
}
}
class AllTableModel extends AbstractTableModel {
List<TableData> tableData = new ArrayList<TableData>();
Object[] columnNames = {"Name", "Grade", "Subject", "Staff"};
public AllTableModel() {
List<TableData> data = new ArrayList<TableData>();
data.add(new TableData("John1", "A", "Maths", "Hellen1"));
data.add(new TableData("John2", "A", "Maths", "Hellen2"));
data.add(new TableData("John3", "A", "Maths", "Hellen3"));
data.add(new TableData("John4", "A", "Maths", "Hellen4"));
data.add(new TableData("John5", "A", "Maths", "Hellen5"));
tableData = data;
}
@Override
public String getColumnName(int column) {
return columnNames[column].toString();
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return tableData.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
TableData data = tableData.get(rowIndex);
switch (columnIndex) {
case 0:
return data.getName();
case 1:
return data.getGrade();
case 2:
return data.getSubject();
case 3:
return data.getStaff();
default:
return null;
}
}
}
class TableData {
private String name;
private String grade;
private String subject;
private String staff;
public TableData(String name, String grade, String subject, String staff) {
super();
this.name = name;
this.grade = grade;
this.subject = subject;
this.staff = staff;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getStaff() {
return staff;
}
public void setStaff(String staff) {
this.staff = staff;
}
}
class MainDataClass {
private static MainDataClass mainDataClass;
private List<TableData> data;
private MainDataClass() {
}
public static MainDataClass getInstance() {
if(null == mainDataClass) {
mainDataClass = new MainDataClass();
}
return mainDataClass;
}
public List<TableData> getData() {
return data;
}
public void setData(List<TableData> data) {
this.data = data;
}
}
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.JScrollPane;
import javax.swing.event.TableModelListener;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
import java.awt.Container;
import java.awt.GridLayout;
import java.util.ArrayList;
public class TablesHavingSameData extends JFrame implements TableModelListener
{
MyTableModel model1;
MyTableModel model2;
JTable table1;
JTable table2;
ArrayList<ArrayList<String>> data;
public void createAndShowGUI()
{
setTitle("JTables");
Container c = getContentPane();
c.setLayout(new GridLayout(2,1));
prepareData();
model1 = new MyTableModel("table1");
model2 = new MyTableModel("table2");
table1 = new JTable(model1);
table2 = new JTable(model2);
model1.addTableModelListener(this);
model2.addTableModelListener(this);
JScrollPane jsTable1 = new JScrollPane(table1);
JScrollPane jsTable2 = new JScrollPane(table2);
c.add(jsTable1);
c.add(jsTable2);
setSize(500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void tableChanged(TableModelEvent evt)
{
AbstractTableModel model = (MyTableModel)evt.getSource();
if (model == model1)
{
table2.repaint();
}
else
table1.repaint();
}
private void prepareData()
{
data = new ArrayList<ArrayList<String>>();
data.add(new ArrayList<String>(){{add("1");add("Michael");}});
data.add(new ArrayList<String>(){{add("2");add("Derake");}});
data.add(new ArrayList<String>(){{add("3");add("Archie");}});
}
private class MyTableModel extends AbstractTableModel
{
String columns[] ;
String sTableName;
public MyTableModel(String tableName)
{
sTableName = tableName;
if ("table1".equals(sTableName))
{
columns = new String[] {"Roll No.","Name"};
}
else
{
columns = new String[] {"Emp ID.","Employee Name"};
}
}
@Override
public String getColumnName(int columnIndex)
{
return columns[columnIndex];
}
@Override
public int getRowCount()
{
return data.size();
}
@Override
public int getColumnCount()
{
return columns.length;
}
@Override
public Object getValueAt(int row, int col)
{
return data.get(row).get(col);
}
@Override
public void setValueAt(Object aValue, int rowIndex, int colIndex)
{
data.get(rowIndex).set(colIndex,(String)aValue);
fireTableCellUpdated(rowIndex,colIndex);
}
@Override
public boolean isCellEditable(int row, int col)
{
return true;
}
}
public static void main(String[] args)
{
SwingUtilities.invokeLater( new Runnable()
{
@Override
public void run()
{
TablesHavingSameData ths = new TablesHavingSameData();
ths.createAndShowGUI();
}
});
}
}
使用Che的答案作为包含四列的主表的基础,那么您的代码应该如下所示:
AllTableModel model = new AllTableModel();
JTable mainTable = new JTable( model );
如果需要模型的另一个视图,则创建一个新视图,而不是新模型。所以代码应该是:
JTable studentTable = new JTable( model );
studentTable.removeColumn( studentTable.getColumn("Subject") );
studentTable.removeColumn( studentTable.getColumn("Staff") );
现在,学生表将只包含“Name”和“Grade”列。
这是MVC编程的基础。也就是说,您可以轻松更改模型的视图。因此,您正在共享1个模型,而不是共享3个单独模型的数据。
刚开始,我正在为一个应用程序创建一个数据库。由于模式在视觉上变得非常复杂,在多个模式中具有相同的user_table是可能的/可行的/推荐的吗? 例如,blogging模式将具有user_table和与此activity相关的其余表。购物模式将再次具有相同的user_table和表来管理购物activity。等等... 目标是将不同模式中的大量表分离开来,从而简化整体管理。 在另一篇文章中,有人建
问题内容: 我有两个模型。 什么JPA / Hibernate注解,我需要把上面,并且使协会工作? 当然,我尝试了很多事情,但没有任何效果。例如,设置 和 ald 。也尝试使用,但是只接受一个参数(不能这样做。 还考虑过将其移动到平板电脑上,但是我不确定OneToMany和ManyToOne的注释应该是什么样,因为我在那里有多个地址,而JoinColumns并没有多大意义。 起作用但未创建关联的事
我有一个运行多个dbs的mysql服务器,这些dbs有一些完全相同的表(别问了,我继承了这个项目): 它们之间还有许多相同的表,此外,DB01、DB02和DB03还有它们独占的其他表。 有没有可能为上面的表结构使用一个模型/服务层,这样我就可以使用Hibernate单独查询每个表? 我尝试的是设置一个抽象超级类(使用@MappedSuperClass),但这需要大量文件继承这个类,唯一的区别是@t
问题内容: Dalvik的内存模型与Java的相同吗?我对引用和非/非原始变量的读写是否是原子的特别感兴趣,但是我也想知道两个平台的内存模型之间是否存在差异。 问题答案: 从4.0(冰淇淋三明治)开始,Dalvik的行为应与JSR-133(Java内存模型)相匹配。 从3.0(Honeycomb)开始,大多数组件都已安装到位,但忽略了一些在实践中很难遇到的小事情(例如,最终确定中的一些边缘案例)。
我有一个gradle android项目,有两个模块: 穿 在我的gradle配置中,我有不同的构建类型。默认设置(debug和release,每个都有自定义设置)以及dev和beta构建类型(也有自定义签名、自定义proguard和自定义applicationIdSuffix)。 我现在想做的是使用构建类型测试版(gradle清洁组件测试版)构建应用程序包。这就开始在测试版中构建应用程序,看到它
我需要编写一个java方法来从一个对象中获取特定的信息。但是,该对象可以是A类型的,也可以是B类型的。下面是我的代码的一部分: 当我这样写它时,它会引发一个错误,说“重复方法”。我怎么才能让这个起作用?