7)SSCCE DefaultTableModel model.addRow(row); 短 自包含 正确 示例然后import java.awt.*;import java.awt.event.*;import java.util.Random;import javax.swing.*;import javax.swing.border.LineBorder;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableCellRenderer;public class DefaultTableModelDemo { public static final String[] COLUMN_NAMES = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" }; private DefaultTableModel model = new DefaultTableModel(COLUMN_NAMES, 0); private JTable table = new JTable(model); private JPanel mainPanel = new JPanel(new BorderLayout()); private Random random = new Random(); public DefaultTableModelDemo() { JButton addDataButton = new JButton("Add Data"); JPanel buttonPanel = new JPanel(); buttonPanel.add(addDataButton); addDataButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { addDataActionPerformed(); } }); model = new DefaultTableModel(COLUMN_NAMES, 0) { private static final long serialVersionUID = 1L; @Override public Class getColumnClass(int column) { return getValueAt(0, column).getClass(); } }; table = new JTable(model) { private static final long serialVersionUID = 1L; @Override public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { Component c = super.prepareRenderer(renderer, row, column); if (isRowSelected(row) && isColumnSelected(column)) { ((JComponent) c).setBorder(new LineBorder(Color.red)); } return c; } }; mainPanel.add(new JScrollPane(table), BorderLayout.CENTER); mainPanel.add(buttonPanel, BorderLayout.SOUTH); } private void addDataActionPerformed() { for (int i = 0; i < 5; i++) { Object[] row = new Object[COLUMN_NAMES.length]; for (int j = 0; j < row.length; j++) { row[j] = random.nextInt(5); } model.addRow(row); } } public JComponent getComponent() { return mainPanel; } public static void main(String[] args) { java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { JFrame frame = new JFrame("DefaultTableModelDemo"); frame.getContentPane().add(new DefaultTableModelDemo().getComponent()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); }}I have a JTable inside a JScrollPane. After calling my function which should populate the table I can't see any changes! I'v tried with table.repaint(), model.fireTableDataChanged() and probably some other stuff that I can't remember anymore - nothing worked. What am I doing wrong??My function:public static void fillVodicTable(JTable table){ DefaultTableModel model=new DefaultTableModel(); //also tried (DefaultTableModel)table.getModel(); table.setModel(model); model.setColumnIdentifiers(new String[]{"Ime", "Priimek", "Epošta", "Datum rojstva", "Licenca", "Jeziki"}); String [] row={"a","b","c","d","e","f"}; model.addRow(row);} 解决方案 1) there no reason call for model.fireTableDataChanged() for DefaultTableModel2) there no reason call for table.repaint(), is useless3) what's for(Jezik j : v.getTuji_jeziki()) row[5]+=", "+j.toString(); there could be more than 100% ** of your issues4) DefaultTableModel works in all cases, but requierd only update on EDT, in other hands this is common issue for all Swing JComponents together5) for better help sooner edit yout question with a SSCCE6) EDT == Event Dispatch Thread7) SSCCEDefaultTableModelmodel.addRow(row);ShortSelf ContainedCorrectExamplethenimport java.awt.*;import java.awt.event.*;import java.util.Random;import javax.swing.*;import javax.swing.border.LineBorder;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableCellRenderer;public class DefaultTableModelDemo { public static final String[] COLUMN_NAMES = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" }; private DefaultTableModel model = new DefaultTableModel(COLUMN_NAMES, 0); private JTable table = new JTable(model); private JPanel mainPanel = new JPanel(new BorderLayout()); private Random random = new Random(); public DefaultTableModelDemo() { JButton addDataButton = new JButton("Add Data"); JPanel buttonPanel = new JPanel(); buttonPanel.add(addDataButton); addDataButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { addDataActionPerformed(); } }); model = new DefaultTableModel(COLUMN_NAMES, 0) { private static final long serialVersionUID = 1L; @Override public Class getColumnClass(int column) { return getValueAt(0, column).getClass(); } }; table = new JTable(model) { private static final long serialVersionUID = 1L; @Override public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { Component c = super.prepareRenderer(renderer, row, column); if (isRowSelected(row) && isColumnSelected(column)) { ((JComponent) c).setBorder(new LineBorder(Color.red)); } return c; } }; mainPanel.add(new JScrollPane(table), BorderLayout.CENTER); mainPanel.add(buttonPanel, BorderLayout.SOUTH); } private void addDataActionPerformed() { for (int i = 0; i < 5; i++) { Object[] row = new Object[COLUMN_NAMES.length]; for (int j = 0; j < row.length; j++) { row[j] = random.nextInt(5); } model.addRow(row); } } public JComponent getComponent() { return mainPanel; } public static void main(String[] args) { java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { JFrame frame = new JFrame("DefaultTableModelDemo"); frame.getContentPane().add(new DefaultTableModelDemo().getComponent()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); }} 这篇关于添加新行后,JTable不刷新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
05-27 01:39
查看更多