当前位置: 首页 > 知识库问答 >
问题:

我的jtextfield无法设置用户单击的单元格(来自Jtable)的值

许寒
2023-03-14

我有这个JTable,我有一个Jextfield,它们都在2个不同的jPanels中。我希望用户能够单击jtable中的某个单元格,并从选定的行中获取该单元格的值到jextfield中,但在第一列中,无论用户按下了什么其他列。当我单击jtable时出现错误时,我不明白为什么...建议?

提前谢谢^_^

    package computerscienceia;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class NewLease2 extends jFrame {

public NewLease2(String key) throws IOException {
    try {
        initComponents();
        this.setTitle(key+"'s Available Flats");

        RandomAccessFile file = new RandomAccessFile("Ds.txt","rw");
        jPanel1.setLayout(new BorderLayout());

        JTable tbl = new JTable();
        DefaultTableModel dtm = new DefaultTableModel();            
        String colomnName[] = {"Floor number","Flat number","Area (sqm)","View","Vacant"};
        dtm.setColumnIdentifiers(colomnName);
        tbl.setEnabled(false);

       tbl.addMouseListener(new MouseAdapter() {
           @Override
           public void mouseClicked(final MouseEvent e){
               if(e.getClickCount() == 1){
                   final JTable target = (JTable)e.getSource();
                   final int row = target.getSelectedRow();

                   final String text = (String)target.getValueAt(row, 0).toString();
                   jTextField1.setText(text);
               }
           }

       });

        int position;
        int flatnum ;
        String line;
        ArrayList allFilecontents = new ArrayList();
        ArrayList redefinedList = new ArrayList();


        while((line = file.readLine())!= null){     
            if(!line.contains("/////////")){
            allFilecontents.add(line);
            }
        }
        for(int x=0; x<allFilecontents.size(); x++){
        String line2 = (String) allFilecontents.get(x);
        //System.out.println("["+line2+"]");

        if(line2.contains("-")){
        String[] Splittedline2 = line2.split("-");
            if(Splittedline2[0].equals(key)){
             position = x;                                                      ///WHOLE Point is to Find Key in File and its position
             flatnum = Integer.parseInt(Splittedline2[3]);
             System.out.println("Position: "+position);
             System.out.println("Flatnum: "+flatnum);

             for(int i=0; i<= flatnum; i++){
                 redefinedList.add(allFilecontents.get(position+i));

            }
             break;
            }
        }
        }
            for(int e=0; e<redefinedList.size()-1; e++){ 
                Object[] SplittedE = redefinedList.get(e+1).toString().split("_");
                if(SplittedE.length == 5){
                for(int t=0; t<SplittedE.length; t++){
                    System.out.print(SplittedE[t]+",");
            }

                }

                System.out.println(SplittedE.length);//At this point all the data is at FinalList. So
                dtm.addRow(SplittedE);
            }


            tbl.setPreferredScrollableViewportSize(new Dimension(100,400));
            tbl.setFillsViewportHeight(true);
            tbl.getTableHeader().setReorderingAllowed(false);
            tbl.setModel(dtm);
            jPanel1.add(new JScrollPane(tbl));     

        file.close();
    } 
    catch (Exception e) {
        e.getCause();
    }   
}

完整错误堆栈跟踪:线程“AWT-EventQueue-0”java中出现异常。lang.ArrayIndexOutOfBoundsException:-1在java。util。矢量。java上的elementData(Vector.java:734)。util。矢量。elementAt(Vector.java:477)位于javax。摆动桌子默认表格模型。javax上的getValueAt(DefaultTableModel.java:648)。摆动JTable。计算机科学院的getValueAt(JTable.java:2719)。新的2美元1美元。鼠标在java上滑动(NewLease2.java:37)。awt。AWTEventMulticaster。鼠标在java上滑动(AWTEventMulticaster.java:270)。awt。组成部分javax上的ProcessMouseeEvent(Component.java:6530)。摆动JComponent。java上的processMouseEvent(JComponent.java:3321)。awt。组成部分java上的processEvent(Component.java:6292)。awt。容器java上的processEvent(Container.java:2234)。awt。组成部分java上的dispatchEventImpl(Component.java:4883)。awt。容器java上的dispatchEventImpl(Container.java:2292)。awt。组成部分java上的dispatchEvent(Component.java:4705)。awt。轻量级调度员。java上的retargetMouseEvent(Container.java:4898)。awt。轻量级调度员。java上的ProcessMouseeEvent(Container.java:4542)。awt。轻量级调度员。java上的dispatchEvent(Container.java:4462)。awt。容器java上的dispatchEventImpl(Container.java:2278)。awt。窗java上的dispatchEventImpl(Window.java:2739)。awt。组成部分java上的dispatchEvent(Component.java:4705)。awt。事件队列。java上的dispatchEventImpl(EventQueue.java:746)。awt。事件队列。在java上访问400美元(EventQueue.java:97)。awt。事件队列3美元。在java上运行(EventQueue.java:697)。awt。事件队列3美元。在java上运行(EventQueue.java:691)。安全访问控制器。java上的doPrivileged(本机方法)。安全ProtectionDomain 1美元。java上的doIntersectionPrivilege(ProtectionDomain.java:75)。安全ProtectionDomain 1美元。java上的doIntersectionPrivilege(ProtectionDomain.java:86)。awt。事件队列4美元。在java上运行(EventQueue.java:719)。awt。事件队列4美元。在java上运行(EventQueue.java:717)。安全访问控制器。java上的doPrivileged(本机方法)。安全ProtectionDomain 1美元。java上的doIntersectionPrivilege(ProtectionDomain.java:75)。awt。事件队列。java上的dispatchEvent(EventQueue.java:716)。awt。EventDispatchThread。java上的pumpOneEventForFilters(EventDispatchThread.java:201)。awt。EventDispatchThread。java上的pumpEventsForFilter(EventDispatchThread.java:116)。awt。EventDispatchThread。java上的pumpEventsForHierarchy(EventDispatchThread.java:105)。awt。EventDispatchThread。java上的pumpEvents(EventDispatchThread.java:101)。awt。EventDispatchThread。java上的pumpEvents(EventDispatchThread.java:93)。awt。EventDispatchThread。运行(EventDispatchThread.java:82)

共有2个答案

羊舌高爽
2023-03-14

我想我部分解决了这个问题。在某一点上,我输入了:tbl.set启用(false);因为我不想让用户对任何单元格进行更改。然而,我删除了它,现在它可以工作了。

然而,我现在有一个新问题。有人知道如何使单元格不可编辑吗。

白博赡
2023-03-14

您可以如下所示覆盖isCellEdable()方法以使所有单元格不可编辑:

JTable tbl = new JTable(){
              @Override
                public boolean isCellEditable(int row, int column) {
                   //all cells false
                   return false;
                };
 类似资料:
  • 问题内容: 我正在尝试用我的程序解决一个奇怪的问题。该程序创建了一系列GUI和JTable,使用户能够生成XML文件。这些表之一是用于创建“语句”的。除了要说的是数据存储在多个2D数组中,这些2D数组又存储在哈希映射中之外,我将不做详细介绍。 这是发生了什么。当用户进入Statement屏幕时,将使用2D数组中的内容生成JTable。此数据填充用户能够修改的单元格。这些单元格之一(也是最重要的)是

  • 我一直在试图找到一种通过直接输入来更新我的细胞的方法。从我的研究来看,每个人似乎都说你必须使用 尽管如此,它还是让我投myJTable-- 以下是我当前的表代码,如果这有帮助的话: 我怎么可能从用户直接输入更新的单元格中保存数据?谢谢!

  • JTable: 我在NetBeans中创建了一个JTable,其中我从数据库中的某些列中获取值,如图中所示,我为TESTNAME、单位、SPECIFICRANGE列带来值,但第二列OBSERVED VALUE我为用户输入保留了空值,用户输入是这样的每当用户点击颜色前面的单元格时,他应该在第二列单元格中得到一个JComboBox,我的意思是鼠标事件上的颜色前面的单元格,对于其他单元格,我使用edit

  • 问题内容: 我不知道如何对齐JTable中单元格的值。 例如,Jtable显示姓名工资X.先生100000.50 XXXX 234.34 YYYy 1205.50 我想以以下格式对齐“薪水”。 如何在JTable上方对齐 问题答案: 无需为此创建自定义类,只需使用默认渲染器即可: 或者更好的方法是在表中实际存储Double值,然后使用适当的数字渲染器,数字渲染器将自动右对齐。然后,您可以使用表格格

  • 我需要在Java NetBeans中的Jtable中的每个单元格中禁用双击编辑。JTable连接到sqlite数据库,并显示数据库表记录。 我还为jtable创建了onmouseclick事件,以便在Jtextfields、combobox、jcalendar中显示所选内容

  • 我只想在假设有一个值列表的单元格中添加一个JComboBox。下面是我的代码,但它在列中的所有单元格中添加了组合框。让我知道我的代码中缺少了什么,以便只在选定的单元格上设置组合框。