Forum zamknięte. Zapraszamy do grupy na Facebooku
Odpowiedz 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
JButton w JTable
03-23-2013, 11:56 AM (Ten post był ostatnio modyfikowany: 03-23-2013 01:36 PM przez majster.)
Post: #1
JButton w JTable
Problem taki jak w temacie. Wiem, ze w internecie jest mnóstwo tutoriali, jednak nie do końca je rozumiem. Jak dodać JButton do komórki JTable?

Ok. Przyciski zrobione. Teraz problem mam następujący:

Tworze tabele w ten sposób:

Kod:
            for(int i = 0; i < emp.GetRowsCount(); i++) {
                cells[i][0] = empTab[i].GetUserName();
                cells[i][1] = empTab[i].GetUserSurname();
                cells[i][2] = empTab[i].GetUserLogin();
                cells[i][3] = empTab[i].GetUserDateOfBirth();
                cells[i][4] = empTab[i].GetUserDateOfEmployment();
                cells[i][5] = empTab[i].GetUserPossition();
                cells[i][6] = empTab[i].GetUserContactNumber();
                
                TableColumn td = table.getColumnModel().getColumn(7);
                MojRenderer mojRenderer = new MojRenderer();
                td.setCellRenderer(mojRenderer);
                MojEditor mojEditor = new MojEditor(empTab[i].GetUserId(), "Edycja użytkownika " + empTab[i].GetUserLogin());
                td.setCellEditor(mojEditor);
            }

Tutaj wlasnie wstawiam tez przycisk. Moje pytanie brzmi, dlaczego nazwa przycisku tworzonego w ten sposob odpowiada zawsze ostatniej wartosci petli? Zalezy mi na tym aby kazda nazwa przycisku byla warotscia
Kod:
"Edycja użytkownika " + empTab[i].GetUserLogin());
Przyciski Tworze w ten sposób:

Kod:
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.EventObject;

import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.event.CellEditorListener;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;

class MojRenderer implements TableCellRenderer {
    public Component getTableCellRendererComponent(JTable table, Object value,
                                                   boolean isSelected, boolean hasValue, int row, int column) {

                    JButton b = new JButton("Edytuj");
                    return b;
    }
}

class MojEditor implements TableCellEditor {
    public MojEditor(int id, String t) {
        EditedUserid = id;
        opis = t;
        System.out.println("Otrzymalem id = " + id);
    }
    public Component getTableCellEditorComponent(JTable table, Object value,
                                                 boolean isSelected, int row, int column) {
                    JButton b = new JButton("Edytuj");
                    b.addActionListener(new ActionListener()
                    {
                            public void actionPerformed(ActionEvent e) {
                                    System.out.println("Wyświetlam id " + EditedUserid);
                                    System.out.println(opis);

                            }
                    });
                    return b;
    }

    public void removeCellEditorListener(CellEditorListener cl) {
    }

    public void addCellEditorListener(CellEditorListener cl) {
    }

    public boolean shouldSelectCell(EventObject ev) {
             return true;
    }

    public boolean isCellEditable(EventObject ev) {
             return true;
    }

    public Object getCellEditorValue() {
             return null;
    }

    public boolean stopCellEditing() {
             return true;
    }

    public void cancelCellEditing() {
    }
    private int EditedUserid;
    private String opis;
}


podejście numer 2.

Użyto algorymtu z: http://tips4java.wordpress.com/2009/07/1...on-column/

następnie utworzyłem akcję i dodałem według opisu:

Kod:
for(int i = 0; i < emp.GetRowsCount(); i++) {
                cells[i][0] = empTab[i].GetUserName();
                cells[i][1] = empTab[i].GetUserSurname();
                cells[i][2] = empTab[i].GetUserLogin();
                cells[i][3] = empTab[i].GetUserDateOfBirth();
                cells[i][4] = empTab[i].GetUserDateOfEmployment();
                cells[i][5] = empTab[i].GetUserPossition();
                cells[i][6] = empTab[i].GetUserContactNumber();
                
                
                Action testAction = new testAction(empTab[i].GetUserName());
                ButtonColumn test = new ButtonColumn(table, testAction, 7);

testAction
Kod:
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;


public class testAction extends AbstractAction {

    /**
     * @param args
     */
    public testAction(String test) {
        t = test;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        System.out.println(t);
    }
    String t;

}

jednak po kliknieciu na przycisk nadal przesylana jest ostania wartosc, a nie wartosc z wiersza.. jak sobie z tym poradzic?
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości