Peguei a SelectTable:
e tô fazendo umas mudanças nela, mas não consigo mudar o tamanho nas colunas de nenhum modo.Nem usando a classe Resizer(https://github.com/MarkyVasconcelos/Towel/blob/master/src/com/towel/swing/table/Resizer.java) nem de outras formas tipo:
TableColumnModel cm = tabela.getColumnModel();
for (int i = 0; i < MyTableModel.WIDTH.length; i++) {
cm.getColumn(i).setPreferredWidth(MyTableModel.WIDTH[i]);
}
Eu preciso que o texto de cada coluna no autofiltro(agora TableFilter) seja mostrado por completo(mesmo com 10 colunas, coloquei um scroll horizontal), e que suas colunas, sigam pelo menos o tamanho do respectivo header.
Vini, já precisou de algo semelhante? :?:
Você alterou autoResizeMode do JTable?
Se ele tiver em auto resize automático, não funciona mesmo.
Claro!E fiz:
Lá dentro do código do SelectTable mesmo.
Vini, eu descobri que o resize só funciona parcialmente.
Textos grandes, como “Data de cadastro”, aparece “Data …” no table filter.Já teve desse problema?
Eu fiz algumas alterações aqui e até que funcionou algumas coisas, roda esse teste com o jar em anexo e da uma olhada no comportamento.
import java.awt.Font;
import java.util.List;
import test.model.Person;
import test.model.PreData;
import com.towel.collections.paginator.ListPaginator;
import com.towel.el.annotation.AnnotationResolver;
import com.towel.swing.event.ObjectSelectListener;
import com.towel.swing.event.SelectEvent;
import com.towel.swing.table.ObjectTableModel;
import com.towel.swing.table.SelectTable;
public class SelectTableViewTest {
public static void main(String[] args) {
ObjectTableModel<Person> model = new ObjectTableModel<Person>(
new AnnotationResolver(Person.class), "name:Extreme long name that will not fit the column header and a lot of random words to get more space,age:Age,live:Live");
SelectTable<Person> st = new SelectTable<Person>(model,
new ListPaginator<Person>(PreData.getSampleList(100), 20));
st.setSelectionType(SelectTable.SINGLE);
// st.setSize(400, 600);
st.setFont(new Font("Arial", Font.ITALIC, 12));
// st.useTableFilter(); //Para ativar o TableFilter, chame isso
st.fitColumnsToHeader();
st.showSelectTable();
st.addObjectSelectListener(new ObjectSelectListener() {
@Override
public void notifyObjectSelected(SelectEvent selectevent) {
Person p = (Person) selectevent.getObject();
System.out.println(p.getName());
}
});
}
}
E por mais que ele cresça, não sei por que, tanto o header normal quanto o do TableFilter cortam as ultimas letras.
Marky.Vasconcelos, melhorou o comportamento SEM o table filter, mas com o table filter, continuo as reticências.E um detalhe: a ordenação tá bagunçada.
Clique em “decrescente” e ao invés de 19 a 0, tá de 9 a 2 .19 a 10, 1,0.E se por ordem crescente, bagunça de novo.Esse comportamento está apenas na PRIMEIRA coluna desse seu exemplo.
Você está retornando Integer.class para a coluna ou String.class? Essa ordem que vc falou é a de Strings.
É por que esse campo no modelo é uma String, e a da segunda coluna é um inteiro.
Vou ver se adicionando margin resolve.
Ah, tá explicado.Ficou bacana poder desligar o autofiltro.
Marky, uma pergunta:
Se vc precisa colar o SelectTable a um JFrame/JPanel da vida como vc faz(agora que eu li a declaração e vi que ela não extende nem um nem outro)?(No meu caso eu fiz retornar um Jframe)
Container c = selectTableConstruida.getContent();
//Dai coloca 'c' onde quiser
O showSelectTable na verdade só faz isso:
public void showSelectTable() {
showSelectTable("Select");
}
public void showSelectTable(String title) {
frame = new JFrame(title);
frame.setContentPane(getContent());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(2);
frame.setVisible(true);
closeOnDispose(new Closable() {
@Override
public void close() {
frame.dispose();
}
});
}
Uma coisa que eu não falei: Sempre que eu adiciono o SelectTable como um componente, ele sempre cria uma barra extra(vertical) o que acaba quebrando o layout da tela, mesmo com espaço de sobra.