2016-04-08 21 views
0

'dan JTable'ı güncelleştirme yapmak istiyorum, bir tuşa basıldığında JTable'ı güncellemek istiyorum. Kaynak olarak bir DefaultTableModel kullanıyorum. Tablo sınıfı:Güncelleştirme DefaultTableModel

import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 
import java.awt.Dimension; 

public class TableDemo extends JPanel { 
    String[] columnNames = {"Tipo","Cantidad"}; 
    DefaultTableModel dtm = new DefaultTableModel(null,columnNames); 
    final JTable table = new JTable(dtm); 

public TableDemo() { 
    table.setPreferredScrollableViewportSize(new Dimension(500, 700)); 
    table.setFillsViewportHeight(true); 
    JScrollPane scrollPane = new JScrollPane(table); 
    add(scrollPane); 
} 

public void addRow(Object [] row) 
{ 
    dtm.addRow(row); 
} 

} 

formu sınıfı: i, AddRow işlevi çağırmak ama asla JTable içinde günceller görebileceğiniz gibi ben ne eksik

import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.DefaultComboBoxModel; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JSplitPane; 
import javax.swing.JTextField; 

public class MyForm extends JFrame { 

JPanel panel; 
JLabel label; 
JTextField txtName; 
JTextField txtSurname; 
JButton btnAccept; 
TableDemo tb = new TableDemo(); 

public MyForm(){ 
    initControls(); 
} 

private void initControls() { 
    setTitle("Form Example"); 
    setSize(600, 400); 
    setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
    setLocationRelativeTo(null); 

    panel = new JPanel();  
    panel.setLayout(null); 

    label = new JLabel("Welcome to Swing"); 
    label.setBounds(50, 10, 200, 30); 

    txtName = new JTextField(); 
    txtName.setBounds(50, 50, 200, 30); 

    txtSurname = new JTextField(); 
    txtSurname.setBounds(270, 50, 200, 30); 

    btnAccept = new JButton("Add"); 
    btnAccept.setBounds(120, 100, 150, 30); 

    onAcceptClick(); 
    TableDemo tablePanel = new TableDemo(); 

    panel.add(label); 
    panel.add(txtName); 
    panel.add(txtSurname); 
    panel.add(btnAccept); 

    JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, 
      tablePanel,panel); 
    splitPane.setDividerLocation(205); 
    splitPane.setEnabled(false); 

    getContentPane().add(splitPane); 
} 

private void onAcceptClick() { 
    btnAccept.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      tb.addRow(new Object[]{"taza",txtName.getText()}); 

     } 
    }); 
public static void main(String[] args) { 
    //Initilizer init = new Initilizer(); 

    Runnable init = new Runnable() { 

     @Override 
     public void run() { 
      MyForm form = new MyForm(); 
      form.setVisible(true); 
     } 
    }; 

    SwingUtilities.invokeLater(init); 
} 
} 

? Thnx

cevap

4

İki TableDemo nesnesi oluşturuyorsunuz - GUI'ye eklediğiniz, tablePanel, satır eklediğiniz diğer, tb;

// ... 

TableDemo tb = new TableDemo(); // TableDemo #1. Never displayed 

private void initControls() { 
    // ... 

    TableDemo tablePanel = new TableDemo(); // TableDemo #2 

    // ... 

    // TableDemo #2 is here added to the GUI 
    JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, tablePanel,panel); 

    // ... 
} 

btnAccept.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent e) { 

     // here you add a row to the non-displayed TableDemo #1 
     tb.addRow(new Object[]{"taza",txtName.getText()}); 
    } 
}); 

Çözüm: Bunu yapma (belli ki)! Sadece bir TableDemo örneği kullanın, görüntüleyin ve değişiklik yapın. Bu yüzden tablePanel değişkeninden kurtulun ve sadece tb değişkenini kullanın.

Diğer sorunlar: Sen null düzenleri kullanıyorsanız

  • . Boş düzenler ve setBounds(), yeni başlayanlar için karmaşık GUI'leri oluşturmanın en kolay ve en iyi yolu gibi Swing'e benziyor gibi görünse de, Swing GUI'leri, bunları kullanırken karşılaşacağınız daha ciddi zorlukları yaratırsınız. GUI yeniden boyutlandırıldığında bileşenlerinizi yeniden boyutlandırmazlar, geliştirmek veya sürdürmek için bir kraliyet cadısıdırlar, kaydırma yuvalarına yerleştirildiğinde tamamen başarısız olurlar, orijinal platformdan farklı olan tüm platformlarda veya ekran çözünürlüklerinde görüntülendiklerinde çok kötü görünürler. .