簡體   English   中英

如何在JTable單元格中附加文本

[英]How to append text in JTable cell

我這里有一個非常簡單的演示程序,對於不那么短的代碼版本感到抱歉,但它是我能做的最短的。 無論如何,我在這里有一個帶有可編輯單元格的第4列jtable 。我希望右側的小鍵盤appendjtableselected cell ,但.setValueAt()不會這樣做。 有沒有辦法將右側的小鍵盤附加到選定的小區? 或者我應該

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();         
            }
        });
    }
}

編輯

當我單擊小鍵盤時,它應該附加到選定的單元格,就像單擊小鍵盤時只插入1個數字。 我希望這些數字附加在選定的單元格中。

我希望這些數字附加在選定的單元格中。

然后將數字附加到現有值。

例如,“7”按鈕的代碼可能是這樣的:

int row = table.getSelectedRow();
int column = table.getSelectedColumn();
String value = table.getValueAt(row, column) + "7";
table.setValueAt(value, row, column);

當然,更好的解決方案是使用通用的ActionListener,然后您可以使代碼更通用:

int row = table.getSelectedRow();
int column = table.getSelectedColumn();
String value = table.getValueAt(row, column) + e.getActionCommand();
table.setValueAt(value, row, column);

action命令只是默認為按鈕的字符串。

不要忘記檢查是否已選擇列和行(選定的行和列索引不是-1):

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);
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM