2014-07-23 11 views
3

나는 아주 간단한 데모 프로그램을 가지고 있으며 짧은 코드 버전이 아니라 내가 할 수있는 가장 짧은 버전을 유감스럽게 생각한다. 어쨌든, 난 여기에 jtable 열 2 편집 가능한 셀이 있습니다. appendselected celljtable의 오른쪽에있는 숫자 패드를 원하지만 .setValueAt() 않습니다. 오른쪽에있는 숫자판이 선택한 셀에 추가 할 수있는 방법이 있습니까? 아니면 내가해야JTable 셀에 텍스트를 추가하는 방법

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 번호가 삽입 된 숫자 키패드를 클릭하면 같은 내가 선택한 셀에 추가해야 할 숫자 키패드를 클릭합니다. 그 숫자가 선택된 셀에 추가되기를 원합니다.

+0

그래서 당신은 선택한 행은 숫자 패드의 오른쪽에 복사 원하십니까? – Braj

+1

나는 혼란 스럽다. 위의 코드가 원하지 않는 코드와 수행하고 싶지 않은 코드를 설명하십시오. –

+0

@HovercraftFullOfEels 질문에서 편집을보십시오. – user3771102

답변

6

해당 숫자가 선택한 셀에 추가되기를 원합니다.

그런 다음 기존 값에 숫자를 추가하십시오. 더 나은 솔루션은 공통 ActionListener를 사용하는 것입니다 물론

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

, 다음 코드는 더 일반적인 수 :

예를 들어, "7"버튼에 대한 코드는 같은 것이 될 수

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

동작 명령의 기본값은 단추 문자열입니다.

+0

예. 그게 하나야! 고맙습니다!! 나중에 답을 줄 것입니다. :) – user3771102

+0

제 코드가 제네릭이되기를 원하지만'actionCommand' 사용법을 모르겠습니다. – user3771102

+0

@ user3771102 :이 [예제] (http://stackoverflow.com/a/9824555/1057230)에서와 같이'ActionListener'를 만들고'actionPerformed (...)'안에 간단히 네 __camickr__에서 답안에 제공된 줄. 그리고 모든 button.addActionListener (새로운 ActionListener() ...)를'button.addActionListener (updateListener)'로 대체하십시오. 그게 다야. –

3

는 열과 행이 선택되었는지 확인하는 것을 잊지 마십시오 (행을 선택하고 열 인덱스가되지 -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); 
    } 
} 
관련 문제