Boa tarde,
Não estou conseguindo fazer uma jtable (inicialmente vazia) aparecer no formulário.
Alguém pode me dar uma ajuda?
Essa é a classe da jtable (um jpanel que a contem):
package sca.ui;
import java.awt.Dimension;
import java.util.Set;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListModel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.ListSelectionListener;
import sca.domain.Aluno;
import com.jgoodies.binding.adapter.AbstractTableAdapter;
import com.jgoodies.binding.adapter.SingleListSelectionAdapter;
import com.jgoodies.binding.list.ArrayListModel;
import com.jgoodies.binding.list.SelectionInList;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.looks.plastic.PlasticXPLookAndFeel;
@SuppressWarnings("serial")
public class PainelAlunos extends JPanel{
private ArrayListModel arrayListModel = new ArrayListModel();
private JTable tblAlunos;
private String[] cabecalho = {"Matrícula", "Nome"};
public PainelAlunos(){
FormLayout layout = new FormLayout("pref","pref");
SelectionInList selecao = new SelectionInList((ListModel)
this.arrayListModel);
AlunoTableAdapter adapter = new AlunoTableAdapter(selecao, cabecalho);
tblAlunos = new JTable(adapter);
tblAlunos.setSelectionModel(new SingleListSelectionAdapter(
selecao.getSelectionIndexHolder()));
//tblAlunos.setFillsViewportHeight(true);
tblAlunos.setVisible(true);
JScrollPane scrollPane = new JScrollPane(tblAlunos);
scrollPane.setPreferredSize(tblAlunos.getPreferredSize());
CellConstraints celula = new CellConstraints();
PanelBuilder builder = new PanelBuilder(layout, this);
builder.setDefaultDialogBorder();
builder.add(scrollPane, celula.xy(1, 1));
scrollPane.setVisible(true);
setVisible(true);
}
public static void main(String[] a) {
try {
UIManager.setLookAndFeel(new PlasticXPLookAndFeel());
JFrame f = new JFrame("Alunos");
f.setDefaultCloseOperation(2);
f.add(new PainelAlunos());
f.pack();
f.setVisible(true);
} catch (UnsupportedLookAndFeelException e) {
System.out.println(e.getMessage());
}
}
private class AlunoTableAdapter extends AbstractTableAdapter {
public AlunoTableAdapter(ListModel listModel, String[] columnNames) {
super(listModel, columnNames);
}
public Object getValueAt(int rowIndex, int columnIndex) {
Aluno model = (Aluno) getRow(rowIndex);
if (columnIndex == 0) {
return model.getNome();
} else if (columnIndex == 1) {
return model.getMatricula();
} else {
throw new RuntimeException("Índice inválido para tabela.");
}
}
}
public void apresentarAlunos(Set<Aluno> alunos) {
this.arrayListModel.clear();
System.err.println("Alunos:");
for (Aluno a : alunos) {
System.err.println(a.toString());
this.arrayListModel.add(a);
}
}
public void inscrever(ListSelectionListener listener) {
tblAlunos.getSelectionModel().addListSelectionListener(listener);
}
}
Essa agora, é a classe do formulário, que chama o painel acima:
package sca.ui;
import java.awt.Font;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.event.ListSelectionListener;
import sca.app.AvaliacaoAlunoPresenter;
import sca.app.SelecaoAlunoView;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.debug.FormDebugPanel;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
public class SelecaoAlunoForm extends JFrame implements SelecaoAlunoView{
private JButton btnSelecionarAluno;
private ImageIcon imgEdit = new ImageIcon(
sca.ui.CadastroDisciplinaForm.class
.getResource("EditComp32x32.gif"));
private JLabel lblImage = new JLabel(imgEdit);
private PainelAlunos painelAlunos;
public SelecaoAlunoForm(){
criarComponentes();
setLocation(100, 100);
setSize(500,400);
}
private void criarComponentes(){
btnSelecionarAluno = new JButton("Selecionar Aluno");
FormLayout layout = new FormLayout("pref,6dlu, pref",
"pref, 6dlu, pref,6dlu, pref,pref:grow,6dlu,pref");
JPanel painel = new JPanel();
CellConstraints celula = new CellConstraints();
this.add(painel);
PanelBuilder builder = new PanelBuilder(layout, painel);
builder.setDefaultDialogBorder();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Cadastro de Disciplina");
JLabel lblHeader = new JLabel();
JLabel lblHelpText = new JLabel();
painelAlunos = new PainelAlunos();
lblHeader.setText("SCA :: Seleção de Aluno");
lblHeader.setFont(new Font("Tahoma", Font.BOLD, 14));
lblHelpText
.setText("Use este formulário para selecionar um aluno.");
// Linha 1 - cabeçalho
builder.add(lblImage, celula.xy(1, 1));
builder.add(lblHeader, celula.xy(3, 1));
builder.add(lblHelpText, celula.xy(3, 3, "left,top"));
builder.add(painelAlunos, celula.xy(3, 4));
builder.add(btnSelecionarAluno, celula.xy(3,6));
this.pack();
}
@Override
public void adicionarListener(AvaliacaoAlunoPresenter listener){
btnSelecionarAluno.addActionListener(listener);
painelAlunos.inscrever(listener);
}
}
Agradeço pela atenção.