Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JTable单元格中追加文本_Java_Swing_Jtable_Treetablecelleditor - Fatal编程技术网

Java 如何在JTable单元格中追加文本

Java 如何在JTable单元格中追加文本,java,swing,jtable,treetablecelleditor,Java,Swing,Jtable,Treetablecelleditor,我这里有一个非常简单的演示程序,很抱歉代码不是很短,但这是我能做的最短的。无论如何,我这里有一个jtable,第2列有一个可编辑的单元格。我希望右侧的numpad将附加到jtable的选定单元格中,但是.setValueAt()不能这样做。是否有任何方法可以将右侧的numpad附加到所选单元格?或者我应该 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; impo

我这里有一个非常简单的演示程序,很抱歉代码不是很短,但这是我能做的最短的。无论如何,我这里有一个
jtable
,第2列有一个可编辑的单元格。我希望右侧的numpad将
附加到
jtable
选定单元格中,但是
.setValueAt()
不能这样做。是否有任何方法可以将右侧的numpad附加到所选单元格?或者我应该

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.EventObject;

import javax.swing.*;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import javax.swing.event.CellEditorListener;
import javax.swing.table.*;

public  class Jtabledemo {

    private static class JTabledemo {

        JTable table;
        JFrame Card = new JFrame();
        JTabbedPane card_tab = new JTabbedPane(); // FOR TAB
        JPanel buttonpanel = new JPanel(); // FOR BUTTON BELOW
        FlowLayout flow = new FlowLayout(FlowLayout.LEFT);

        public JTabledemo() {      
            Card.setVisible(true);
            Card.setSize(821,340);
            Card.setTitle("");
            Card.setResizable(false);

            final Toolkit toolkit = Toolkit.getDefaultToolkit();
            Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();      
            int x=(int)((dimension.getWidth() - Card.getWidth())/2);
            int y=(int)((dimension.getHeight() - Card.getHeight())/2);

            Card.setLocation(x, y);
            Card.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

            JPanel bodypanel = new JPanel();
            bodypanel.setLayout(new BorderLayout());

            JPanel container = new JPanel();
            container.setLayout(new BorderLayout());

            JPanel jp1 = new JPanel();
            jp1.setBackground(Color.lightGray);
            jp1.setPreferredSize(new Dimension(510,260));
            jp1.setLayout(new BorderLayout());

            table = new JTable(new ExampleTableModel());
            JScrollPane scrollPane = new JScrollPane(table);
            table.setFillsViewportHeight(true);

            JTableHeader header = table.getTableHeader();
            table.setRowHeight(20);
            jp1.add(scrollPane);

            JPanel buttonpanel = new JPanel();
            buttonpanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
            buttonpanel.setBorder(new EmptyBorder(0,0,0,0));

            JButton btnOk = new JButton("Ok");
            btnOk.setPreferredSize(new Dimension(90, 40));
            buttonpanel.add(btnOk);

            final JButton btnCancel = new JButton("Cancel");
            btnCancel.setPreferredSize(new Dimension(90, 40));
            buttonpanel.add(btnCancel);

            JPanel container2 = new JPanel();
            container2.setLayout(new BorderLayout());
            container2.setPreferredSize(new Dimension(344,0));

            JPanel numberpanel = new JPanel();
            numberpanel.setPreferredSize(new Dimension(235,0));
            numberpanel.setBorder(new EmptyBorder(25,0,0,0));
            numberpanel.setBorder(BorderFactory.createEtchedBorder(Color.white,Color.gray));
            numberpanel.setLayout(flow);

            JButton button_7 = new JButton("7");
            button_7.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    table.setValueAt("7", table.getSelectedRow(), table.getSelectedColumn());
                }
            });
            button_7.setPreferredSize(new Dimension(70, 70));
            numberpanel.add(button_7);

            JButton button_8 = new JButton("8");
            button_8.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    table.setValueAt("8", table.getSelectedRow(), table.getSelectedColumn());
                }   
            });
            button_8.setPreferredSize(new Dimension(70, 70));
            numberpanel.add(button_8);

            JButton button_9 = new JButton("9");
            button_9.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    table.setValueAt("9", table.getSelectedRow(), table.getSelectedColumn());
                }   
            });
            button_9.setPreferredSize(new Dimension(70, 70));
            numberpanel.add(button_9);

            Card.add(bodypanel);
            bodypanel.add(container, BorderLayout.WEST);
            container.add(jp1,BorderLayout.NORTH);
            container.add(buttonpanel,BorderLayout.SOUTH);
            bodypanel.add(container2, BorderLayout.EAST);
            container2.add(numberpanel, BorderLayout.EAST);
        }

        public static class ExampleTableModel extends DefaultTableModel {
            public ExampleTableModel() {
                super(new Object[]{"Tank", "Current", "Dip"}, 0);
                for (int index = 0; index < 4; index++) {
                    addRow(new Object[]{index, "Text for " + index, "Na na", index});
                }
            }

            @Override
            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return columnIndex == 2;
            }
        }
    }

    public static void main(String[] args){
    //Use the event dispatch thread for Swing components
        EventQueue.invokeLater(new Runnable() {
            @Override
            @SuppressWarnings("ResultOfObjectAllocationIgnored")
            public void run() {
                new JTabledemo();         
            }
        });
    }
}
import java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.EventObject;
导入javax.swing.*;
导入javax.swing.border.BevelBorder;
导入javax.swing.border.border;
导入javax.swing.border.EmptyBorder;
导入javax.swing.event.CellEditorListener;
导入javax.swing.table.*;
公共类Jtabledemo{
私有静态类JTabledemo{
JTable表;
JFrame卡=新JFrame();
JTabbedPane card_tab=新JTabbedPane();//用于选项卡
JPanel buttonpanel=new JPanel();//用于下面的按钮
FlowLayout flow=新的FlowLayout(FlowLayout.LEFT);
公共JTabledemo(){
设置为可见(真);
卡片设置尺寸(821340);
卡片。片名(“”);
卡片。可设置大小(假);
final Toolkit=Toolkit.getDefaultToolkit();
维度=Toolkit.getDefaultToolkit().getScreenSize();
int x=(int)((dimension.getWidth()-Card.getWidth())/2);
int y=(int)((dimension.getHeight()-Card.getHeight())/2);
卡片设置位置(x,y);
Card.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel bodypanel=新的JPanel();
bodypanel.setLayout(新的BorderLayout());
JPanel容器=新的JPanel();
container.setLayout(新的BorderLayout());
JPanel jp1=新的JPanel();
jp1.挫折背景(颜色:浅灰色);
jp1.setPreferredSize(新尺寸(510260));
jp1.setLayout(新的BorderLayout());
table=新的JTable(新的ExampleTableModel());
JScrollPane scrollPane=新的JScrollPane(表);
表.setFillsViewPerthweight(真);
JTableHeader=table.getTableHeader();
表2.设置行高(20);
jp1.add(滚动窗格);
JPanel buttonpanel=新的JPanel();
buttonpanel.setLayout(新的FlowLayout(FlowLayout.RIGHT));
buttonpanel.setBorder(新的EmptyOrder(0,0,0,0));
JButton btnOk=新JButton(“Ok”);
btnOk.setPreferredSize(新尺寸(90,40));
按钮面板添加(btnOk);
最终JButton btnCancel=新JButton(“取消”);
btnCancel.setPreferredSize(新尺寸(90,40));
按钮面板添加(btnCancel);
JPanel container2=新的JPanel();
container2.setLayout(新的BorderLayout());
容器2.设置首选尺寸(新尺寸(344,0));
JPanel numberpanel=新的JPanel();
numberpanel.setPreferredSize(新维度(235,0));
numberpanel.setBorder(新的空序(25,0,0,0));
numberpanel.setboorder(BorderFactory.create蚀刻边框(Color.white,Color.gray));
编号面板设置布局(流程);
JButton按钮_7=新JButton(“7”);
按钮7.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
table.setValueAt(“7”,table.getSelectedRow(),table.getSelectedColumn());
}
});
按钮7.设置首选尺寸(新尺寸(70,70));
数字面板添加(按钮7);
JButton button_8=新JButton(“8”);
按钮8.addActionListener(新建ActionListener(){
已执行的公共无效操作(操作事件e){
table.setValueAt(“8”,table.getSelectedRow(),table.getSelectedColumn());
}   
});
按钮8.设置首选尺寸(新尺寸(70,70));
数字面板添加(按钮8);
JButton button_9=新JButton(“9”);
按钮9.addActionListener(新建ActionListener(){
已执行的公共无效操作(操作事件e){
table.setValueAt(“9”,table.getSelectedRow(),table.getSelectedColumn());
}   
});
按钮9.设置首选尺寸(新尺寸(70,70));
数字面板添加(按钮9);
添加卡(车身板);
车身面板。添加(容器,边框布局。西部);
container.add(jp1,BorderLayout.NORTH);
container.add(buttonpanel,BorderLayout.SOUTH);
车身面板。添加(集装箱2,边界布局。东部);
容器2.添加(数字面板,边界布局。东);
}
公共静态类ExampleTableModel扩展了DefaultTableModel{
公共示例表模型(){
超级(新对象[]{“坦克”、“当前”、“倾斜”},0);
对于(int-index=0;index<4;index++){
addRow(新对象[]{index,“文本”表示“+索引”,Na-Na,index});
}
}
@凌驾
公共布尔值isCellEditable(int-rowIndex、int-columnIndex){
返回列索引==2;
}
}
}
公共静态void main(字符串[]args){
//对Swing组件使用事件分派线程
invokeLater(新的Runnable(){
@凌驾
@SuppressWarnings(“ResultOfObjectAllocationIgnored”)
公开募捐{
新JTabledemo();
}
});
}
}
编辑

当我单击numpad时,它应该附加到选定的单元格中,就像单击numpad时只插入1个数字一样。我希望这些数字附加到选定的单元格中

我希望这些数字
int row = table.getSelectedRow();
int column = table.getSelectedColumn();
String value = table.getValueAt(row, column) + "7";
table.setValueAt(value, row, column);
int row = table.getSelectedRow();
int column = table.getSelectedColumn();
String value = table.getValueAt(row, column) + e.getActionCommand();
table.setValueAt(value, row, column);
public void actionPerformed(ActionEvent e) {
   int selectedRow = table.getSelectedRow();
   int selectedColumn = table.getSelectedColumn();

   // **** better first check that user has selected something
   if (selectedRow < 0 || selectedColumn < 0) {
      return;
   }

   // **** next make sure cell is editable
   if (table.isCellEditable(selectedRow, selectedColumn)) {

      // get current value
      String value = table.getValueAt(selectedRow, selectedColumn).toString();

      // append new value
      value += "7";  // or actionCommand as per camickr -- 1+ to his answer.
      table.setValueAt(value, selectedRow, selectedColumn);
   }
}