Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2013, 01:18   #1
Herly
Форумчанин
 
Регистрация: 07.11.2009
Сообщений: 118
По умолчанию ошибка при попытке изменить значение в таблице JTable

Здравствуйте.
При попытке изменить значение в JTable возникает куча ошибок и изменения не происходят, хотя обработчик событий изменения модели таблицы есть.
Подскажите как это исправить.
Код:
public class AppWindow extends JFrame {

	private JPanel jp;
	private JTable table10;
	private Integer[][] matrix10=RandomFillOfArray.rndFillArr(10);
	private JScrollPane jsp;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				try {
					AppWindow frame = new AppWindow();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public AppWindow() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(50, 50, 1320, 799);//начальная позиция и размер окна
		jp = new JPanel();
		jp.setLayout(null); //положение компонента задаётся "ручками", компоновщик не учавствует
		setResizable(false);//запрет на масштабирование

		final JLabel lbl10 = new JLabel("New label");
		lbl10.setBounds(227, 256, 116, 16);
		lbl10.setPreferredSize(new Dimension(1400,20));
		lbl10.setHorizontalAlignment(SwingConstants.CENTER);
		jp.add(lbl10);
		
		table10 = new JTable(matrix10,RandomFillOfArray.fillHead(10));
		table10.setBounds(171, 34, 213, 160);
		table10.setBorder(BorderFactory.createLineBorder(Color.gray));
		//2 строки позволяют делать выбор только одной ячейки таблицы
		table10.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		table10.setCellSelectionEnabled(true);
		table10.setTableHeader(null);
		jp.add(table10);
		
		//получение модели выбора
		ListSelectionModel listSelMod=table10.getSelectionModel();
		//Обработка событий выбора строк
		listSelMod.addListSelectionListener(new ListSelectionListener(){
			public void valueChanged(ListSelectionEvent le){
				String str="Selected Row: ";
				int row=table10.getSelectedRow();
				int col=table10.getSelectedColumn();
				lbl10.setText(str+row+" "+col);
			}
		});
		final TableModel tabMod=table10.getModel();
		tabMod.addTableModelListener(new TableModelListener(){
			public void tableChanged(TableModelEvent tme){
				if(tme.getType()==TableModelEvent.UPDATE){
					matrix10[tme.getFirstRow()][tme.getColumn()]=(Integer)tabMod.getValueAt(tme.getFirstRow(),tme.getColumn());
				}
			}
		});
		
		getContentPane().add(jp);
	
	}
	public Integer[][] getMatrix10() {
		return matrix10;
	}

	public void setMatrix10(Integer[][] matrix10) {
		this.matrix10 = matrix10;
	}
}
Код
Код:
RandomFillOfArray.rndFillArr(10);
возвращает двумерный массив с целочисленными значениями от 0 до 99 включительно.
Если всё откладывать на потом, то потом будет всё.
Herly вне форума Ответить с цитированием
Старый 09.11.2013, 00:05   #2
Herly
Форумчанин
 
Регистрация: 07.11.2009
Сообщений: 118
По умолчанию

В общем я разобрался в чём проблема. Мб. кому-то пригодиться.

Если заполнить массив так:
Код:
Integer[][] matrix10=RandomFillOfArray.rndFillArr(10);
И потом создать табличку так:
Код:
table10 = new JTable(matrix10,RandomFillOfArray.fillHead(10));
То конструктор не может нормально прикрутить эту матрицу к TableModel.
Для решения этой проблемы нужно самому определить модель таблицы и потом уже создавать табличку.

В решении этой проблемы мне помогла следующая книга: Г.Шилдт. Swing. Руководство для начинающих.
Если всё откладывать на потом, то потом будет всё.
Herly вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при попытке компиляции demoniqus Общие вопросы C/C++ 15 17.04.2012 13:11
ошибка при попытке билда в masm'e nuevegramodelamor Помощь студентам 2 24.01.2011 19:45
Ошибка при попытке повторного открытии окна ssdm Общие вопросы по Java, Java SE, Kotlin 0 25.01.2010 19:41
ошибка при попытке запустить программу Fellot Общие вопросы Delphi 3 23.04.2009 21:23
Ошибка при попытке вывода полей из таблицы в ORACLE older Общие вопросы Delphi 2 04.06.2008 17:26