0

我有这段代码:

listTable.addMouseListener(new MouseAdapter() {
                 public void mouseClicked(MouseEvent e) {

                  if (e.getClickCount() == 1) {
                  JTable target = (JTable)e.getSource();

                  int row = target.getSelectedRow();
                  int column = target.getSelectedColumn();

                  String title = listTable.getValueAt(row, column).toString();
                  String duration = listTable.getValueAt(row, column+1).toString();
                  String genre = listTable.getValueAt(row, column+2).toString();
                  String actor = listTable.getValueAt(row, column+3).toString();
                  String director = listTable.getValueAt(row, column+4).toString();
                  //String rentable = listTable.getValueAt(row, column+5).toString();
                  //String synopsis = listTable.getValueAt(row, column+6).toString();

                  txtTitle.setText(title);
                  txtDuration.setText(duration);
                  txtGenre.setText(genre);


                  }
                });

这使我能够:

  • 选择行时,它将列中的值传递给JTextBoxes。

但是,当我默认不单击第一列时,选择会出现乱码。比如我不先点击“Title”栏,再点击“Duration”栏,就会把duration放在txtTitle里面,其他的也混在一起了。

如何添加一段代码,即选择行时,它会默认 - 选择第一列?

这是发生的情况的屏幕截图:

在此处输入图像描述

谢谢,布赖恩

4

4 回答 4

3

改变这个

int column = target.getSelectedColumn(); 

int column = 0; 

您的版本从用户单击的位置获取列索引,您需要第一个(索引 0)

于 2012-04-14T13:28:28.213 回答
3

一切都取决于如何设置 ListSelectionModel,但对我有用

myTable.changeSelection(row, column, false, false);
于 2012-04-14T13:30:12.227 回答
1

为什么不总是根据已知列提取值,而不是强制选择列?

例如,您可以替换:

String title = listTable.getValueAt(row, column).toString();

和:

String title = listTable.getValueAt(row, 0).toString();

如果您提供重新排序列的功能,那么您可以尝试table.getModel().getValueAt(convertRowIndextoModel(row), 0);

于 2012-04-14T13:30:24.403 回答
0

很明显,当您单击持续时间列时

int column = target.getSelectedColumn();

获取 Duration 的列值,因此

String title = listTable.getValueAt(row, column).toString();

从持续时间列中获取值。解决此问题的最佳方法是硬代码列号。假设您的表按以下顺序标题:第 0 列持续时间:第 1 列类型:第 2 列等等

简单的说String title = listTable.getValueAt(row, 0).toString();

String duration = listTable.getValueAt(row,1).toString(); 

等等..!!

希望能帮助到你

于 2012-04-14T13:31:06.597 回答