JFrame在收到事件后不绘画

问题描述:

我有我的代码在下面,我试图接收m_rows这是一个数组。它看起来像保持空白,我的框架保持空白。我可以看到班上收到了这个活动。我认为我的班级表工作正常。在接收到来自监听器的m_rows并将它传递给TableModel(m_rows)之间的代码中,你看到下面的代码有什么明显的错误吗?JFrame在收到事件后不绘画

感谢

class Frame extends JFrame implements FlowListener { 

    private List<Candle> m_rows = new ArrayList<Candle>(); 

    public Frame() { 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setTitle("Ma premiere fenetre"); 
     setBounds(50, 100, 1000, 800); 

     Container conteneur = new JPanel(); 
     TableModel tableModel = new TableModel(m_rows); 
     JTable table = new JTable(tableModel); 

     JPanel tablePanel = new JPanel(); 

     tablePanel.add(table); 

     conteneur.setLayout(new GridLayout(2, 1)); 
     conteneur.add(tablePanel); 

     this.add(conteneur); 
     this.setVisible(true); 

    } 

    @Override 
    public void updateOnFlow(List<Candle> newFlow) { 
     m_rows = newFlow; 
     this.repaint(); 

    } 

} 
+0

你也试过'validate()'? http://stackoverflow.com/questions/1097366/java-swing-revalidate-vs-repaint – Sentry

+0

此外,你检查'updateOnFlow'真的被称为?你在哪里注册'Frame'实例为'FlowListener'? – Sentry

+0

是的,我尝试验证,而不是工作。 updateOnFlow被调用,我在updateOnFlow中的system.out.println上得到结果,Frame在另一个类中注册。 – matel

我认为问题是,要m_row分配的东西对TableModel没有影响。试试这个:

class Frame extends JFrame implements FlowListener { 
    private JTable table; 
    ... 

    public Frame() { 
     ... 
     TableModel tableModel = new TableModel(m_rows); // Did you mean DefaultTableModel? 
     table = new JTable(tableModel); 
     ... 
    } 

    @Override 
    public void updateOnFlow(List<Candle> newFlow) { 
     m_rows = newFlow; 
     TableModel tableModel = new TableModel(m_rows); 
     table.setModel(tableModel); 
     this.repaint(); 
    } 
} 
+0

谢谢你的确在工作。我失踪了setmodel – matel

+0

很高兴我能帮忙。你可以标记这个答案是正确的,如果你愿意,给我们两个代表;) – Sentry