2010-01-15 2 views
8

데이터와 함께 JTable 셀 안에 버튼을 추가 할 수 있습니까? 나는 데이터베이스에서 데이터 (숫자)를 표시하는 열과 같은 셀 안의 숫자를 늘리거나 줄이는 두 개의 단추가있는 테이블을 만드는 방법을 시도합니다.데이터와 함께 JTable의 셀 안에 버튼을 추가 하시겠습니까?

| ID | 수량 |
| 06 | 2 [+] [-] |

위의 [+] [-] 버튼과 비슷합니다. 그래서 [+]를 누르면 [-]를 누르면 3과 1로 바뀝니다.

답변

15

예, 가능하지만 쉬운 일은 아닙니다.

사용자 정의 cell renderer과 자신의 cell editor을 직접 작성해야합니다.

내가 5 분에서 만든 샘플입니다 :

sample

그것은 지금까지 완벽한에서하지만 개념을 보여줍니다.

import java.awt.Component; 
import java.awt.Font; 
import javax.swing.*; 
import javax.swing.table.*; 
import java.awt.Dimension; 

public class CustomCell { 
    public static void main(String [] args) { 
     Object [] columnNames = new Object[]{ "Id", "Quantity" }; 
     Object [][] data  = new Object[][]{ {"06", 1}, {"08", 2} }; 

     JTable table = new JTable(data, columnNames) { 
      public TableCellRenderer getCellRenderer(int row, int column) { 
       return new PlusMinusCellRenderer(); 
      } 
     }; 

     table.setRowHeight(32); 
     showFrame(table); 
    } 

    private static void showFrame(JTable table) { 
     JFrame f = new JFrame("Custom Cell Renderer sample"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(new JScrollPane(table)); 
     f.pack(); 
     f.setVisible(true); 
    } 
} 

class PlusMinusCellRenderer extends JPanel implements TableCellRenderer { 
     public Component getTableCellRendererComponent(
          final JTable table, Object value, 
          boolean isSelected, boolean hasFocus, 
          int row, int column) { 
       this.add(new JTextField(value.toString() )); 
       this.add(new JButton("+")); 
       this.add(new JButton("-")); 
       return this; 
     } 
} 

여기 interestinghere 될 수있는 스레드의 :

다음은 소스 코드입니다.

+1

이 버튼에 actionListeners를 추가 할 수 있습니까? – cp101020304

+0

버튼은 실제로 클릭 할 수 없습니다. 내 자신의 MouseListener 또는 이와 같은 작동하도록 추가 할 것이라고? – ricky3350

1

셀에 텍스트 (또는 숫자) 이외의 것을 표시하려면 사용자 지정 셀 렌더러를 만들어야한다고 생각합니다. 셀 렌더러의 임무는 셀에 표시해야하는 것을 페인트하는 것입니다.

Table Renderer documentation을 참조하십시오.

그래서이 경우 텍스트 필드와 작은 + 및 - 단추가 포함 된 작은 JPane 또는 필요한 경우 JSpinner 구성 요소 만 만들 수 있습니다. 조금 까다 롭습니다 만, 가능해야합니다.

1

tutorial에서 설명한 것처럼 값을 표시하는 렌더러와 편집중인 셀의 이벤트를 감지하는 편집기가 모두 필요합니다. 이 example에서 ComponentJCheckBox입니다. 이 경우 AbstractTableModel을 확장하여 주어진 열에 대해 Class을 올바르게 제공하는 사용자 정의 DataModel이 필요합니다. Joonas가 제안한 JSpinner을 사용하면 좋은 결과를 얻을 수 있습니다.

관련 문제