JTable 소개
JTable은 복잡한 데이터 구조를 화면에 표시하기 위해 JComponent 클래스를 상속받은 컴포넌트입니다. JTable은 MVC(Model View Controller) 디자인 패턴을 따르며, 데이터를 행과 열 형태로 깔끔하게 보여줄 수 있습니다. 또한 TableModelListener, TableColumnModelListener, ListSelectionListener, CellEditorListener, RowSorterListener 등 다양한 리스너 인터페이스를 지원합니다.
JTable의 특정 셀이 비어 있는지 검사하려면 JTable 클래스의 getValueAt() 메서드를 활용하는 것이 가장 일반적인 방법입니다. 아래 예제에서는 "Click Here" 버튼을 클릭하면 액션 이벤트가 발생하고, 테이블 전체를 순회하며 빈 셀을 검사한 뒤 결과에 따라 "Field is Empty"와 같은 팝업 메시지를 사용자에게 표시합니다.
핵심 로직 설명
검증 과정은 다음 순서로 진행됩니다.
1. 편집 중인 셀이 있다면 stopCellEditing()을 호출해 편집을 종료합니다.
2. 이중 for문으로 모든 행과 열을 순회하면서 getValueAt(i, j)로 값을 가져옵니다.
3. trim() 후 길이가 0인 값이 발견되면 즉시 false를 반환하여 빈 셀이 있음을 알립니다.
예제 코드
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class JTableEmptyValidateTest extends JFrame {
private JPanel panel;
private JTable table;
private JButton button;
String[] columnNames = new String[] {"Student 1", "Student 2"};
String[][] dataValues = new String[][] {{"95", "100"}, {"", "85"}, {"80", "100"}};
public JTableEmptyValidateTest() {
setTitle("Empty Validation Table");
panel = new JPanel();
table = new JTable();
TableModel model = new myTableModel();
table.setModel(model);
panel.add(new JScrollPane(table));
button = new JButton("Click Here");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if(validCheck()) {
JOptionPane.showMessageDialog(null,"Field is filled up");
} else {
JOptionPane.showMessageDialog(null, "Field is empty");
}
}
});
add(panel, BorderLayout.CENTER);
add(button, BorderLayout.SOUTH);
setSize(470, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public boolean validCheck() {
if(table.getCellEditor()!= null) {
table.getCellEditor().stopCellEditing();
}
for(int i=0; i < table.getRowCount(); i++) {
for(int j=0; j < table.getColumnCount(); j++) {
String value = table.getValueAt(i,j).toString();
if(value.trim().length() == 0) {
return false;
}
}
}
return true;
}
class myTableModel extends DefaultTableModel {
myTableModel() {
super(dataValues, columnNames);
}
public boolean isCellEditable(int row, int cols) {
return true;
}
}
public static void main(String args[]) {
new JTableEmptyValidateTest();
}
}실행 결과
프로그램을 실행하면 학생 점수 데이터가 담긴 테이블과 하단의 버튼이 표시됩니다. 두 번째 행의 첫 번째 셀이 의도적으로 비어 있으므로 버튼을 클릭하면 "Field is Empty" 메시지가 나타납니다. 반대로 모든 셀이 채워져 있다면 "Field is filled up" 메시지가 출력됩니다.

마무리
이처럼 getValueAt() 메서드와 trim()을 조합하면 Swing 애플리케이션에서 테이블 입력값의 유효성을 손쉽게 검사할 수 있습니다. 실제 프로젝트에서는 null 체크를 함께 추가하거나, 특정 열만 검증하도록 범위를 조정하는 등의 확장도 가능하니 상황에 맞게 응용해 보시기 바랍니다.