Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> строки в JTable только для int, JTable 
:(
    Опции темы
LeonLG
Дата 20.3.2006, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 15.3.2006

Репутация: нет
Всего: нет



есть ли возможность создания JTable, где в строки можно было бы заносить только int ??
PM MAIL   Вверх
LSD
Дата 20.3.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Надо создать TableModel которая хранила бы в себе только Integer.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
powerOn
Дата 21.3.2006, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



вот примерчик таблицы 4x4 с именами колонок "Title 1", "Title 2", "Title 3", "Title 4"

Код

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
LeonLG
Дата 21.3.2006, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 15.3.2006

Репутация: нет
Всего: нет



спасибо
нашел тоже хороший примерчик, может кому пригодится smile

http://www.java-forum.org/de/viewtopic.php?t=7708

Это сообщение отредактировал(а) LeonLG - 21.3.2006, 15:40
PM MAIL   Вверх
LeonLG
Дата 26.3.2006, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 15.3.2006

Репутация: нет
Всего: нет



опять проблемка

моя TableModel


Код

import java.util.Hashtable;

import javax.swing.table.AbstractTableModel;

public class Tabelle extends AbstractTableModel {
    final String[] spaltenName = { "Jahr", "Einnahmen", "Betriebskosten",
            "Zinsen", "Tilgung", "Flow to equity", "Fremdkapital" };

    private int anzahlZeilen;

    private Hashtable data;

    // Konstruktor
    public Tabelle(int anzahlZeilen) {
        this.anzahlZeilen = anzahlZeilen;

        this.data = new Hashtable();

    }

    // Methoden für das TableModel-Interface
    public int getRowCount() {
        return anzahlZeilen;
    }

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

    public String getColumnName(int column) {
        return spaltenName[column].toString();
    }

    
    Class[] typ = new Class[] { Integer.class, Integer.class, Integer.class,
            Double.class, Double.class, Integer.class, Integer.class };

    public Class getColumnClass(int columnIndex) {
        return typ[columnIndex];
    }

    public Object getValueAt(int rowIndex, int columnIndex) {

        // return data[rowIndex][columnIndex];
        String key = "[" + rowIndex + "," + columnIndex + "]";
        String value = (String) data.get(key);
        return value == null ? "" : value;
    }

    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        
    }
}


в етом случае таблица вообще не будет показана
еслиже я изменю все на Interger, хотя мне надо и Integer и Double

Код

Class[] typ = new Class[] { Integer.class, Integer.class, Integer.class,
            Integer.class, Integer.class, Integer.class, Integer.class };




таблица работает, но как только я кликну в другую ячейку, все что я писал до етого исчезает
проблема лежит в public void setValueAt(),
но как мне определить ячейки для разных типоф (Integer, Double)
помогите Please

PM MAIL   Вверх
LSD
Дата 26.3.2006, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Данная модель не будет работать по любому. У тебя метод setValueAt() возвращает строку, а для столбца указан тип Integer или Double, это раз. Во вторых метод setValueAt() не реализован вообще.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
LeonLG
Дата 28.3.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 15.3.2006

Репутация: нет
Всего: нет



попробовал setValue(), getValue() вот так:

Код

Object daten[][];

public void setValueAt(Object value, int rowIndex, int columnIndex) {
     switch(columnIndex){
     case 0: {
         daten[rowIndex][columnIndex] = (Integer) value;
     fireTableCellUpdated(rowIndex, columnIndex);
     }
     case 1: {
         daten[rowIndex][columnIndex] = (Integer) value;
     fireTableCellUpdated(rowIndex, columnIndex);
     }     
     case 2: {
         daten[rowIndex][columnIndex] = (Integer) value;
     fireTableCellUpdated(rowIndex, columnIndex);
     }
     case 3: {
         daten[rowIndex][columnIndex] = (Double) value;
     fireTableCellUpdated(rowIndex, columnIndex);
     }
     case 4: {
         daten[rowIndex][columnIndex] = (Double) value;
     fireTableCellUpdated(rowIndex, columnIndex);
     }
     case 5: {
         daten[rowIndex][columnIndex] = (Integer) value;
     fireTableCellUpdated(rowIndex, columnIndex);
     }
     case 6: {
         daten[rowIndex][columnIndex] = (Integer) value;
     fireTableCellUpdated(rowIndex, columnIndex);
     }
    
     }

public Object getValueAt(int rowIndex, int columnIndex) {
        

//         return daten[rowIndex][columnIndex];
         String key = "[" + rowIndex + "," + columnIndex + "]";
         String value = (String) data.get(key);
         return value == null ? "" : value;
         }




говорит

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Cannot format given Object as a Number
at java.text.DecimalFormat.format(DecimalFormat.java:480)
at java.text.Format.format(Format.java:133)
at javax.swing.JTable$DoubleRenderer.setValue(JTable.java:3563)
at javax.swing.table.DefaultTableCellRenderer.getTableCellRendererComponent(DefaultTableCellRenderer.java:181)
at javax.swing.JTable.prepareRenderer(JTable.java:3919)
.............

????????

PM MAIL   Вверх
powerOn
Дата 28.3.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



В строках 6,10, 14, 18.... Ты делаешь преобразование объекта класса Object к числовому типу, видимо не правильно.
попробуй так:

Код

         daten[rowIndex][columnIndex] = Integer.parseInt(value. toString());





--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
LSD
Дата 28.3.2006, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Еще раз. Ты в методе getValueAt() возвращаешь объект типа String, а в модели указан тип данного столбца как Integer. Когда JTable пытается отформатировать значение как число и возникает ошибка, т.к. это не число а строка.

А теперь внимание правильный ответ:
Код
public class Tabelle extends AbstractTableModel
{
  final String[] spaltenName = {"Jahr", "Einnahmen", "Betriebskosten", "Zinsen", "Tilgung", "Flow to equity", "Fremdkapital"};
  final Class[] typ = new Class[]{Integer.class, Integer.class, Integer.class, Double.class, Double.class, Integer.class, Integer.class};
  private int anzahlZeilen;
  private Number[][] data;

  public Tabelle(int anzahlZeilen)
  {
    this.anzahlZeilen = anzahlZeilen;
    this.data = new Number[anzahlZeilen][typ.length];
  }

  public int getRowCount()
  {
    return anzahlZeilen;
  }

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

  public String getColumnName(int column)
  {
    return spaltenName[column];
  }

  public boolean isCellEditable(int rowIndex, int columnIndex)
  {
    return true;
  }

  public Class getColumnClass(int columnIndex)
  {
    return typ[columnIndex];
  }

  public Object getValueAt(int rowIndex, int columnIndex)
  {
    return data[rowIndex][columnIndex];
  }

  public void setValueAt(Object aValue, int rowIndex, int columnIndex)
  {
    data[rowIndex][columnIndex] = (Number) aValue;
    fireTableCellUpdated(rowIndex, columnIndex);
  }

  public static void main(String[] args)
  {
    JTable table = new JTable(new Tabelle(3));

    JFrame frame = new JFrame("Test frame");
    frame.getContentPane().add(new JScrollPane(table));
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.1524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.