【发布时间】:2015-02-25 14:50:50
【问题描述】:
我有 java jtable,我想在它上面使用鼠标双击事件,而且我有很多代码可以将侦听器粘贴到表格中,无法将其粘贴到我的代码中,并且在这里阅读数十个侦听器代码很累在那里,我是 Java 新手,需要更多耐心和轻松的直接帮助,而 stack 内部的一些专业人士没有给出或负担得起这些基本问题,我也感觉到了同样的情况,因为过去曾多次尝试对某些问题进行解释对我来说暗淡的代码我只作为帮助而投入了?!希望这次我能走运! 最后,堆栈中所有可用的侦听器代码都使用设计器带来的表,而不是使用由代码创建的我的代码,不知道为什么这可能是我的主要问题。
public class JFband extends javax.swing.JFrame {
Connection con1;
Statement stmt1;
ResultSet rs1;
Connection con;
Statement stmt;
ResultSet rs;
String fLag;
DefaultTableModel tableModel;
static String Bno;
JTable jTnameSearch = new JTable(tableModel);
private TableRowSorter<TableModel> rowSorter
= new TableRowSorter<>();
// declare sorter to sort JTable data based on jTsearch Box field entry
public JFband() {
this.setLayout(null);
// here is the code with error :
jTnameSearch.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
if (e.getClickCount() == 2){
JOptionPane.showMessageDialog(null, "the double click code is working");
}
}
} );
}
}
// listener for my jTable
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
public void LoadTable(){
try {
String host1= "jdbc:derby://localhost:1527/accountingsystem";
String uName1="adamin";
String uPass1="1234a1234b";
String sql1;
con1=DriverManager.getConnection(host1,uName1 ,uPass1);
//String sql ="select * from log where password= jTuser.getText() " ;
if (fLag.equals("search"))
sql1="select band_name,band_no ,band_type from band order by band_no ";
else
sql1="select band_name,band_no ,band_type from band where band_name='" +filterText.getText()+ "' order by band_no ";
stmt1=con1.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs=stmt1.executeQuery(sql1);
int jCounter=0;
while (rs.next()){ jCounter++;
}
if (jCounter==0)
return;
rs.beforeFirst();
String[] columnnames = {"اسم الحساب","رقم الحساب","نوع الحساب"};
String Data[][]=new String[jCounter][3];
int j=0;
while (rs.next()) {
// JOptionPane.showMessageDialog(null, i+"فاصل "+ jCounter);
Data[j][0]=rs.getString("band_name");
Data[j][1]= rs.getString("band_no");
Data[j][2]= rs.getString("band_type");
++j;
}
// DefaultTableModel tableModel;
tableModel = new DefaultTableModel(Data,columnnames);
jTnameSearch = new JTable(tableModel) { // القوس هذا جديد اضيف لعمل شرط عدم امكانية الكتابة
// في الجدول اصبح خمسة سطر
public boolean isCellEditable(int row, int col)
{
return false;
}
};
// انتهت دالة منع الكتابة
//only single selection mode
jTnameSearch.setSelectionMode(0);
rowSorter = new TableRowSorter<>(jTnameSearch.getModel());
jTnameSearch.setRowSorter(rowSorter);
jSpane3.setViewportView(jTnameSearch);
jTnameSearch.setFillsViewportHeight(true);
//jTnameSearch.setAutoCreateRowSorter(true); // enable sort and filter
jPsearch.setVisible(true);
jPanel2.setVisible(false);
filterText.requestFocus();
rs.close();
fLag="text";
}
catch (SQLException ex) {
System.out.println(ex);
}
}
}
【问题讨论】:
-
请考虑添加MCVE,而不是在此处转储所有代码。一些提示: 1) 不要将空布局与布局管理器混用。只用最后一个。 2) 使用适当的侦听器代替 KeyListener。一般来说,ActionListener 捕捉“Enter”键按下的文本字段或组合框中的选择更改,DocumentListener 侦听文本组件中的文本更改。 3) 将数据库连接代码与您的 GUI 分开。在多层设计中,它们属于不同的层。
-
嗨,我已经遇到了您的问题,您要做的就是首先检查所选行是否与上一次单击中的相同对你有用。
-
@dic19 感谢您的建议,我已阅读并尝试相应地减少我的代码。
-
我检查了从设计器导入的 jtable 的鼠标侦听器,它的工作情况是设计中的表格,而在我的情况下,当代码创建的 jtable 有什么帮助时,它不起作用?为什么代码不影响代码 jtable 并在设计表中工作?
标签: java swing netbeans jtable mouse-listeners