2014-09-13 1 views
0

мне интересно, как я хотел бы добавить уникальный (изменить одну does't изменение всех из них) строки к JTable с JButtonКак бы я иметь кнопку уникальный добавить строку в JTable

final DefaultTableModel mod = new DefaultTableModel(); 
JTable t = new JTable(mod); 
mod.addColumn{"  "}; 
mod.addColumn{"  "}; 
JButton b = new JButton 
b.addActionListener(new ActionListener() { 
public void actionPerformed(ActionEvent e) { 
//How would I make tf unique by producing a different variable every row if changed 
final JTextField tf = new JTextField(); 
final Object[] ro = {"UNIQUE ROW", tf}; 
mode.addRow(ro); 
}): 
tf.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
    //s change to an other variable every row added 
    String s = tf.getText(); 
}): 
+2

Если бы это была моя проблема, и я ищу помощи здесь, я бы немного времени, чтобы создать и опубликовать [минимальный пример программы] (http://stackoverflow.com/help/mcve), так как я знаю, что это лучший и быстрый способ заставить людей полностью понять мою проблему, а затем помочь мне. –

+1

Кроме того, похоже, вы пытаетесь добавить компонент JTextField в строку модели таблицы, и я не думаю, что вы действительно хотите это сделать, поскольку JTable не отображает компоненты как таковые, а скорее отображает «копии» компонентов. И хотя один и тот же столбец каждой строки может использовать один и тот же «визуализированный» компонент, отображаемое содержимое отличается именно тем, что данные модели разные. Лучше для вас более подробно описать то, что вы пытаетесь достичь, и да, создайте и опубликуйте свой [mcve] (http://stackoverflow.com/help/mcve). –

ответ

4

Вы близки, но вы не хотите добавлять JTextField в строку таблицы. Вместо этого добавьте данные, которые он хранит. Например:

import java.awt.event.ActionEvent; 
import javax.swing.*; 
import javax.swing.table.DefaultTableModel; 

public class UniqueRow extends JPanel { 
    public static final String[] COLS = {"Col 1", "Col 2"}; 
    private DefaultTableModel model = new DefaultTableModel(COLS, 0); 
    private JTable table = new JTable(model); 
    private JTextField textField1 = new JTextField(10); 
    private JTextField textField2 = new JTextField(10); 

    public UniqueRow() { 
     add(new JScrollPane(table)); 
     add(textField1); 
     add(textField2); 
     ButtonAction action = new ButtonAction("Add Data"); 
     textField1.addActionListener(action); 
     textField2.addActionListener(action); 
     add(new JButton(action)); 
    } 

    private class ButtonAction extends AbstractAction { 
     public ButtonAction(String name) { 
     super(name); 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 

     // get text from JTextField 
     String text1 = textField1.getText(); 
     String text2 = textField2.getText(); 

     // create a data row with it. Can use Vector if desired 
     Object[] row = {text1, text2}; 

     // and add row to JTable 
     model.addRow(row); 
     } 
    } 

    private static void createAndShowGui() { 
     UniqueRow mainPanel = new UniqueRow(); 

     JFrame frame = new JFrame("UniqueRow"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 
Смежные вопросы