문제

데이터와 함께 jtable 셀 내부에 버튼을 추가 할 수 있습니까? 내가하려고하는 것은 데이터베이스에서 데이터 (숫자)를 표시하는 열이있는 테이블을 만들고 동일한 셀 내부의 숫자를 늘리거나 줄이기 위해 두 개의 버튼을 만드는 것입니다.

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

+] [-]가 버튼 인 위와 같은 것입니다. [+]를 누르면 [-]를 누르면 숫자가 3과 1으로 변경됩니다.

도움이 되었습니까?

해결책

예, 쉽지는 않지만 가능합니다.

당신은 당신 자신의 관습을 써야합니다 셀 렌더러 그리고 당신 자신 셀 편집기.

이것은 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;
        }
}

여기에 스레드가 있습니다 흥미로운 그리고 여기.

다른 팁

에서 논의 된 바와 같이 지도 시간 편집중인 셀에서 이벤트를 감지하려면 값과 편집기를 표시하려면 렌더러가 모두 필요합니다. 이것에서 예시,, Component a JCheckBox. 이것은 관습이 필요합니다 DataModel 그것은 확장됩니다 AbstractTableModel 올바른 공급 Class 주어진 열의 경우. 요나스의 사용 제안 JSpinner 잘 작동하는 좋은 것입니다.

셀에 텍스트 (또는 숫자) 이외의 다른 것을 보여 주려면 사용자 정의 셀 렌더러를 만들어야한다고 생각합니다. 셀 렌더러의 임무는 셀에서 보여주는 데 필요한 것을 페인트하는 것입니다.

보다 테이블 렌더러 문서.

따라서이 경우 텍스트 필드와 작은 + 및 버튼이 포함 된 작은 jpane 또는 필요한 작업을 수행하는 경우 JSpinner 구성 요소를 만들 수 있습니다. 약간 까다 롭지 만 가능해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top