Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/04/2019, 21:07
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años, 7 meses
Puntos: 6
Personalizando JList

Hola a todos, acá estoy en una situación algo asfixiante, estoy preparando gente para un examen
y una mini tesis en java, y dicha institución prohibe el uso de jtable promoviendo así el uso de jlist, no estoy teniendo problemas en cargar los datos pero sí en personalizarlos.
Logré ponerle cabeceras a los jlist pero sí una columna tiene 2 o más líneas no se adapta la parte de abajo de la comuna, y si el texto es largo no se adapta la parte de la derecha, además de que las cabeceras no deben tener el mismo tamaño de las columnas del jlist.
Intenté usar reflection pero no doy bien al clavo.
Pongo el código para que me digan dónde están los errores y que cambiar:

Código Java:
Ver original
  1. package app.vista.util.celdas;
  2. import app.vista.util.columnas.HeaderPanel;
  3. import java.awt.Color;
  4. import java.awt.ComponentOrientation;
  5. import java.awt.FlowLayout;
  6. import java.awt.Font;
  7. import javax.swing.BorderFactory;
  8. import javax.swing.JComponent;
  9. import javax.swing.JLabel;
  10. import javax.swing.JPanel;
  11. import javax.swing.JTextArea;
  12. import javax.swing.ListCellRenderer;
  13. public abstract class CeldaPerformer extends JPanel implements ListCellRenderer {
  14.     protected HeaderPanel header;
  15.     public CeldaPerformer(HeaderPanel xheader) {
  16.         this.header = xheader;
  17.         setLayout(new FlowLayout(FlowLayout.LEFT, 2, 2));
  18.         setBackground(Color.WHITE);
  19.         setOpaque(true);
  20.         setFont(new Font("DejaVu Sans",Font.BOLD, 12));
  21.     }
  22.     protected void customeColumnRenderer(JComponent xcolumn,JLabel xheader) {
  23.         if(xcolumn instanceof JTextArea){
  24.             JTextArea ta = (JTextArea)xcolumn;
  25.             ta.setOpaque(true);
  26.             ta.setFont(new Font("DejaVu Sans",Font.BOLD, 12));
  27.             ta.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
  28.             ta.setForeground(Color.GRAY);
  29.             ta.setPreferredSize(xheader.getPreferredSize());
  30.             ta.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 20));
  31.         }
  32.     }
  33.     protected abstract void colourColumn(JComponent xcolumn,Color xc);
  34. }

Código Java:
Ver original
  1. package app.vista.util.celdas;
  2. import app.contr.clases.*;
  3. import app.contr.util.Conversiones;
  4. import app.contr.util.FacadeSystem;
  5. import app.vista.util.columnas.*;
  6. import java.awt.*;
  7. import java.lang.reflect.Field;
  8. import javax.swing.*;
  9. public class CeldaRegistro extends CeldaPerformer {
  10.     private JTextArea lregistro = new JTextArea();
  11.     private JTextArea lfecha = new JTextArea();
  12.     private JTextArea lpaciente = new JTextArea();
  13.     private JTextArea lmedico = new JTextArea();
  14.     private JTextArea ldescripcion = new JTextArea();
  15.     private JTextArea ltratamiento = new JTextArea();
  16.     public CeldaRegistro(HeaderPanel xheader) {
  17.         super(xheader);
  18.         try {
  19.             rendererColumn((HeaderRegistro)header);
  20.             customeColumnRenderer(lregistro, ((HeaderRegistro)header).getLregistro());
  21.             customeColumnRenderer(lfecha, ((HeaderRegistro)header).getLfecha());
  22.             customeColumnRenderer(lpaciente, ((HeaderRegistro)header).getLpaciente());
  23.             customeColumnRenderer(lmedico, ((HeaderRegistro)header).getLmedico());
  24.             customeColumnRenderer(ldescripcion, ((HeaderRegistro)header).getLdescripcion());
  25.             customeColumnRenderer(ltratamiento, ((HeaderRegistro)header).getLtratamiento());
  26.             this.add(lregistro);
  27.             this.add(lfecha);
  28.             this.add(lpaciente);
  29.             this.add(lmedico);
  30.             this.add(ldescripcion);
  31.             this.add(ltratamiento);
  32.         } catch(Exception ex){
  33.             System.out.println(ex.getMessage());
  34.         }        
  35.     }
  36.     private void rendererColumn(HeaderRegistro xheader) throws Exception {
  37.         for(Field f : xheader.getClass().getDeclaredFields()){
  38.             f.setAccessible(true);
  39.             Object obj = f.get(xheader);
  40.             if(obj instanceof JLabel){
  41.                 JLabel l = (JLabel)obj;
  42.                 l.setBorder(BorderFactory.createEmptyBorder(0, 20, 50, 150));
  43.             }
  44.         }
  45.     }
  46.     private int getBottom() throws Exception {
  47.         int maxbottom = 0;
  48.         for(Paciente p : FacadeSystem.getInstance().manejadorDePacientes().findAll(null)){
  49.             for(Registro r : p.getRegistros().getChildrens()){
  50.                 for(Field f : r.getClass().getDeclaredFields()){
  51.                     f.setAccessible(true);
  52.                     Object obj = f.get(r);
  53.                     if(obj instanceof String){
  54.                         String str  = (String)obj;
  55.                         String[] aux = str.split("\n");
  56.                         if(aux.length > 1){
  57.                             for(String s : aux){
  58.                                 maxbottom += 20;                            
  59.                             }
  60.                         }
  61.                     }
  62.                 }
  63.             }
  64.         }
  65.         return maxbottom;
  66.     }
  67.     private int getRight() throws Exception {
  68.         int maxright = Integer.MIN_VALUE;
  69.         for(Paciente p : FacadeSystem.getInstance().manejadorDePacientes().findAll(null)){
  70.             for(Registro r : p.getRegistros().getChildrens()){
  71.                 for(Field f : r.getClass().getDeclaredFields()){
  72.                     f.setAccessible(true);
  73.                     Object obj = f.get(r);
  74.                     if(obj instanceof String){
  75.                         String str  = (String)obj;
  76.                         String[] aux = str.split("\n");
  77.                         if(aux.length > 1){
  78.                             for(String s : aux){
  79.                                 if(s.length() > maxright){
  80.                                     maxright = s.length();
  81.                                 }
  82.                             }
  83.                         }
  84.                     }
  85.                 }
  86.             }
  87.         }
  88.         return maxright * 70;
  89.     }
  90.     @Override
  91.     protected void colourColumn(JComponent xcolumn,Color xc){
  92.         if(xcolumn instanceof JTextArea){
  93.             JTextArea ta = (JTextArea)xcolumn;
  94.             ta.setBackground(xc);
  95.             ta.setForeground(Color.BLACK);
  96.             ta.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 20));
  97.         }
  98.     }
  99.     @Override
  100.     public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
  101.         Registro data = (Registro)value;
  102.         lregistro.setText(Conversiones.CStr(data.getId()));
  103.         lfecha.setText(Conversiones.MostrarFechaYHora(data.getConsulta().getFecha()));
  104.         lmedico.setText(data.getConsulta().getMedico().getNombre() + " " + data.getConsulta().getMedico().getApellido());
  105.         lpaciente.setText(data.getConsulta().getPaciente().getNombre() + " " + data.getConsulta().getPaciente().getApellido());
  106.         ldescripcion.setText(data.getDescripcion());
  107.         ltratamiento.setText(data.getTratamientos());
  108.         if (index % 2 == 0) {
  109.             colourColumn(lregistro, Color.LIGHT_GRAY);
  110.             colourColumn(lfecha, Color.LIGHT_GRAY);
  111.             colourColumn(lmedico, Color.LIGHT_GRAY);
  112.             colourColumn(lpaciente, Color.LIGHT_GRAY);
  113.             colourColumn(ldescripcion, Color.LIGHT_GRAY);
  114.             colourColumn(ltratamiento, Color.LIGHT_GRAY);            
  115.         } else {
  116.             colourColumn(lregistro, Color.WHITE);
  117.             colourColumn(lfecha, Color.WHITE);
  118.             colourColumn(lmedico, Color.WHITE);
  119.             colourColumn(lpaciente, Color.WHITE);
  120.             colourColumn(ldescripcion, Color.WHITE);
  121.             colourColumn(ltratamiento, Color.WHITE);
  122.         }
  123.         if(isSelected) {
  124.             colourColumn(lregistro, Color.PINK);
  125.             colourColumn(lfecha, Color.PINK);
  126.             colourColumn(lmedico, Color.PINK);
  127.             colourColumn(lpaciente, Color.PINK);
  128.             colourColumn(ldescripcion, Color.PINK);
  129.             colourColumn(ltratamiento, Color.PINK);
  130.         }
  131.         setEnabled(list.isEnabled());
  132.         setFont(list.getFont());
  133.         return this;
  134.     }
  135. }
__________________
Si te interesa, visita mi perfil de Linkedin. Gracias