JTable- problem z edycją komórki

Odpowiedz Nowy wątek
2006-12-20 16:35
0

Witam,
mam prblem z JTable a mianowcie mam kolumnę Rabaty w której znajduje się JComboBox w którym znajdują się ceny odpowiednio po rabacie. Ale chciałbym także zrobić tak żeby w tej kolumnie oprócz tego że można wybrać rabat z JComboBox była możliwość ręcznego wpisania ceny po rabacie. Z góry dziękuje za pomoc.
Pozdrawiam</image>

Pozostało 580 znaków

2006-12-20 20:18
0

Spróbuje Ci pomóc, ale rozpisz dokładniej swój problem. Może wstaw kawałek kodu.

Pozdrawima BookaYashee

Pozostało 580 znaków

2006-12-21 12:17
0

no więc kod wygla\ąda następująci

JComboBox combo=new JComboBox();
combo.addItem(1);
combo.addItem(2);
TableModel tableModel= new TableMOdel();
JTable table =new JTable();
table.setModel(tableModel);
TableCellEditor editor = new DefaultCellEditor(combo);
TableColumnModel columnModel = table.getColumnModel();
TableColumn column = columnModel.getColumn(tableModel.COLUM_CENA);
column.setCellEditor(editor);

ten fragment kodu powoduje że po klikniecie w kolumne cena mam do wyboru dwie opcje 1 i 2 które sąw combo Boxie. Natomiast chciałbym zrobićtak że oprócz tego że można wybraćceny z combo można je też wpisywaćz ręki czyli jak jest to domyślnie w tablach.

Pozostało 580 znaków

2006-12-21 18:47
0

pobaw sie Cell renderami i editorami
ponizej przyklad kliku moich klas..

class ProductTableModel extends AbstractTableModel{
    private static final long serialVersionUID = -666L;
    private ArrayList<Product> data;
    private String[] columnNames;
    public ProductTableModel(){
        this.columnNames=new String[]{"ID","Firma","Nazwa"};
        data=new ArrayList<Product>();
    }
    public ProductTableModel(ArrayList<Product> data){
        this.columnNames=new String[]{"ID","Firma","Nazwa"};
        this.data=data;
    }
    public int getRowCount() {
        return data.size();
    }

    public int getColumnCount() {
        return columnNames.length;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        Product p=data.get(rowIndex);
        if (p!=null)
        switch (columnIndex){
            case 0:return p.getID();
            case 1:return p.getCompany();
            case 2:return p.getName();
            default: return "";
        }
        else{
            return "";
        }
    }
    public String getColumnName(int index){
        return columnNames[index];
    }
    public void setTableData(ArrayList<Product> data){
        if (data!=null){
            this.data=data;
            fireTableRowsInserted(0,data.size()-1);
        }
        else{
            data=new ArrayList<Product>();
            fireTableRowsInserted(0,-1);
        }

    }
    public Class<?> getColumnClass(int columnIndex) {
        return String.class; //TO moze Cie zainteresowac...
    }
    public Product getProductAt(int index){
        return data.get(index);
    }

}

class CheckboxRender implements TreeCellRenderer{
    private JCheckBox cbox=new JCheckBox();
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        if (leaf){
            Object obj=((DefaultMutableTreeNode)value).getUserObject();
                if (obj instanceof JCheckBox){
                    cbox=(JCheckBox)obj;
                    cbox.setEnabled(tree.isEnabled());
                    if (selected){
                        cbox.setForeground(UIManager.getColor("Tree.selectionForeground"));
                        cbox.setBackground(UIManager.getColor("Tree.selectionBackground"));
                    }
                    else{
                        cbox.setForeground(UIManager.getColor("Tree.textForeground"));
                        cbox.setBackground(UIManager.getColor("Tree.textBackground"));
                    }
                return cbox;
                }
                else
                    return new DefaultTreeCellRenderer().getTreeCellRendererComponent(tree,value,selected,expanded,leaf,row,hasFocus);
        }
        else
            return new DefaultTreeCellRenderer().getTreeCellRendererComponent(tree,value,selected,expanded,leaf,row,hasFocus);
    }
}

class CheckboxEditor extends AbstractCellEditor implements TreeCellEditor{
    private static final long serialVersionUID = -666L;
    private JTree tree;
    public CheckboxEditor(JTree tree){
        this.tree=tree;
    }
    public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) {
        return new CheckboxRender().getTreeCellRendererComponent(tree,value,true,expanded,leaf,row,true);
    }

    public Object getCellEditorValue() {
        return new JCheckBox();
    }
    public boolean isCellEditable(EventObject ev){
        if (ev instanceof MouseEvent){
            MouseEvent me=(MouseEvent)ev;
            TreePath path=tree.getPathForLocation(me.getX(),me.getY());
            if (path!=null){
                Object node=path.getLastPathComponent();
                if (node instanceof DefaultMutableTreeNode){
                    if (((DefaultMutableTreeNode)node).getUserObject() instanceof JCheckBox)
                        return true;
                }   
            }
        }
        return false;
    }
}

pobaw sie i pokombinuj

pozdrawiam

Pozostało 580 znaków

2008-07-14 22:35
Daria
0

Witam.
Mam bardzo podobny problem jak kolega. Próbowałam już różnymi sposobami i nic nie działa. Występuje wyjątek: java.lang.ArrayIndexOutOfBoundsException: 2 >= 0
Chciałabym aby kolumna "ile dni była comboBoxem.

Mój kod:
JTable tbl3=new JTable();

    JComboBox cb=new JComboBox();
    cb.add(1); cb.add(2);

    Vector tbCols=new Vector();        
      tbCols.add("ID");        
      tbCols.add("Tytuł");
      tbCols.add("Ile dni");

    tableModel tbMod=new tableModel(tbCols); 

    Vector row=new Vector();        
      row.add (   /* TU ZAPISUJE MI ID */ );
      row.add("JAKIŚ TYTUŁ");
      row.add(cb); //MÓJ ComboBox

    tbMod.addRow(row);

(*) TableColumn colm=tbl3.getColumnModel().getColumn(2);
colm.setCellEditor(new DefaultCellEditor(cb));

    tbl3.setModel(tbMod);

Gdy robię row.add("coś tam" / zamiast CB w trzeciej kolumnie / ) wtedy działa dobrze i generuje sie tabelka, lecz gdy wstawie cb wyskakuje wyjątek lub komunikat taki jak u kolego wyżej(to zależy gdzie umieszczę kod (*)

Prosze o pomoc bo mecze sie juz z tym bardzo długo. Pewnie jakiś głupi błąd robię :(

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0