【发布时间】:2012-12-06 19:20:26
【问题描述】:
单击鼠标时,我尝试从JTable 获取值以放入JTextField,但它不起作用。例如,当用户从我的表中选择一行时,JTextField 会动态填充所选行的信息。
我的JTable 也在JScrollPane 中。我的桌子上还有一个DefaultTableModel。
DefaultTableModel model = new DefaultTableModel(){
public boolean isCellEditable(int row, int column){
return false;
}
};
private JTable jTable1 = new JTable(model);
public Reservation() {
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().setLayout( null );
this.setSize( new Dimension(400, 300) );
this.setTitle( "Rezervasyon" );
jLabel1.setText("Kitap No: ");
jLabel1.setBounds(new Rectangle(0, 185, 60, 15));
jTextField1.setBounds(new Rectangle(60, 180, 70, 20));
jLabel2.setText("Ogrenci No: ");
jLabel2.setBounds(new Rectangle(165, 180, 65, 20));
jTextField2.setBounds(new Rectangle(250, 180, 75, 20));
jButton1.setText("Gonder");
jButton1.setBounds(new Rectangle(135, 210, 75, 21));
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
jLabel3.setText("Ogrenci ID: ");
jLabel3.setBounds(new Rectangle(5, 30, 100, 15));
jTextField3.setBounds(new Rectangle(80, 25, 120, 20));
jScrollPane1.setBounds(new Rectangle(5, 50, 350, 115));
jScrollPane1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int row = jTable1.getSelectedRow();
String book = model.getValueAt(row, 0).toString();
jTextField1.setText(book);
System.out.println(book);
String stuID = model.getValueAt(row, 1).toString();
jTextField2.setText(stuID);
}
});
jButton2.setText("Ara");
jButton2.setBounds(new Rectangle(285, 25, 75, 21));
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton2_actionPerformed(e);
}
});
jScrollPane1.getViewport().add(jTable1, null);
this.getContentPane().add(jButton2, null);
this.getContentPane().add(jScrollPane1, null);
this.getContentPane().add(jTextField3, null);
this.getContentPane().add(jLabel3, null);
this.getContentPane().add(jButton1, null);
this.getContentPane().add(jTextField2, null);
this.getContentPane().add(jLabel2, null);
this.getContentPane().add(jTextField1, null);
this.getContentPane().add(jLabel1, null);
String header [] ={"Kitap No", "Ogrenci No"};
for(int i = 0; i < header.length; i++){
model.addColumn(header[i]);
}
}
【问题讨论】:
-
为什么要向 JScrollPane 添加 MouseListener?您不应该将它添加到 JTable 中吗?接下来我们需要讨论您不使用布局管理器,但这是一个不同的讨论。
-
因为我认为滚动窗格比 jtable 的容器更受欢迎
-
但你是对的谢谢:)
-
但是您不想在 JScrollPane 上监听鼠标点击。您对 JTable 中的点击感兴趣。请注意,JScrollPane 不是 JTable 的容器,因为它由 Viewport 持有,但这不是问题。
-
其他问题:避免空布局和绝对组件定位,因为它极难维护。你想给你的变量起有意义的名字,让你的代码自我注释。当你使用像 jTextField2 这样的变量名时,我们很难理解你的代码在做什么。为什么不使用 addressTextField 或其他描述其功能的名称?
标签: java swing jtable jscrollpane textfield