概述
最近,笔者遇到这样一个需求:利用jtable显示结果,当双击某一行时,显示该记录的具体细节。
思路:将具体细节存放在一个文件中,当鼠标双击某一行时,找到对应的文件,并将文件的内容呈现出来。
1.设置单元格不可编辑
DefaultTableModel mm = new DefaultTableModel() {
private static final long serialVersionUID = 1L;
// 设置单元格不可编辑
public boolean isCellEditable(int rowIndex, int ColIndex) {
return false;
}
};
// 准备数据......
准备数据部分根据您的需求而定,这里提供一个参考:
String[] columnNames = { "序号", "能耗成本", "管道混合成本", "罐底混合成本", "切换次数", "用罐个数" };
mm.setColumnIdentifiers(columnNames);
FileReader reader = new FileReader(filePath);
BufferedReader br = new BufferedReader(reader);
String line;
int lineNo = 1;
while ((line = br.readLine()) != null) {
String data[] = line.split(" ");
// 一次读入一行数据
Vector<String> v = new Vector<>(5);
v.add(0, lineNo + "");
v.add(1, data[0]);
v.add(2, data[1]);
v.add(3, data[2]);
v.add(4, data[3]);
v.add(5, data[4]);
mm.addRow(v);
lineNo++;
}
// 关闭读写器
br.close();
reader.close();
// 不要在UI线程外更新操作UI,这里SwingUtilities会找到UI线程并执行更新UI操作
SwingUtilities.invokeLater(() -> {
resultTable.setModel(mm);
boolean[] flags = new boolean[mm.getRowCount()];
for (int i = 0; i < mm.getRowCount(); i++) {
Map<String, Double> referenceCost = Config.getInstance().referenceCost;
Map<String, Double> resultCost = new HashMap<String, Double>();
resultCost.put("energyCost", Double.parseDouble(mm.getValueAt(i, 1) + ""));
resultCost.put("pipeMix", Double.parseDouble(mm.getValueAt(i, 2) + ""));
resultCost.put("tankMix", Double.parseDouble(mm.getValueAt(i, 3) + ""));
resultCost.put("chargeTime", Double.parseDouble(mm.getValueAt(i, 4) + ""));
resultCost.put("tankUsed", Double.parseDouble(mm.getValueAt(i, 5) + ""));
}
// 突出显示非支配解
setRowsColor(resultTable, flags);
});
值得提醒的是,上面的代码需要查询文件,一般比较耗时,因此,笔者采用的是多线程更新的方式,以防止UI阻塞。
2.设置鼠标双击事件
JTable resultTable = new JTable();
resultTable.setEnabled(false);
resultTable.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseClicked(MouseEvent e) {
// 点击几次,这里是双击事件
if (e.getClickCount() == 2) {
int row = resultTable.getSelectedRow();
System.out.println(row);
}
}
});
最后
以上就是精明电灯胆为你收集整理的【java】swing中jtable点击事件1.设置单元格不可编辑2.设置鼠标双击事件的全部内容,希望文章能够帮你解决【java】swing中jtable点击事件1.设置单元格不可编辑2.设置鼠标双击事件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复