Problema com JTable dentro de um JComboBox

0 respostas
jcvijr

Olá

Por favor, analisem e executem o seguinte exemplo:

import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;

public class TableCombo extends JFrame {

	private static class Row {

		private String id, val, extra;

		public Row(String id, String val, String extra) {
			this.id = id;
			this.val = val;
			this.extra = extra;
		}

		public String getId() {
			return id;
		}

		public String getVal() {
			return val;
		}

		public String getExtra() {
			return extra;
		}
	}

	private static class RowCellRenderer extends JTable implements
	ListCellRenderer {

		public RowCellRenderer() {
			setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
		}

		public Component getListCellRendererComponent(JList list,
				Object value, int index, boolean isSelected,
				boolean
				cellHasFocus) 
		{
			setModel(new RowTableModel((Row) value));
			if (isSelected) {
				getSelectionModel().setSelectionInterval(0, 0);
			}
			return this;
		}
	}

	private static class RowTableModel extends AbstractTableModel {

		private Row row;

		public RowTableModel(Row row) {
			this.row = row;
		}

		public int getRowCount() {
			return 1;
		}

		public int getColumnCount() {
			return 3;
		}

		public Object getValueAt(int rowIndex, int columnIndex) {
			switch(columnIndex) {
			case 0:
				return row.getId();
			case 1:
				return row.getVal();
			case 2:
				return row.getExtra();
			}
			return null;
		}
	}
	
	protected void frameInit() {
		super.frameInit();

		setLayout(new FlowLayout());
		setTitle("JComboBox contendo JTable");
		
		JComboBox box = new JComboBox(new Row[] {
				new Row("Row 1", "Row 1 value", "Row 1 Extra value"),
				new Row("Row 2", "Row 2 value", "Row 2 Extra value"),
				new Row("Row 3", "Row 3 value", "Row 3 Extra value"),
				new Row("Row 4", "Row 4 value", "Row 4 Extra value"),
		});

		box.setPreferredSize(new Dimension(450,16));
		box.setRenderer(new RowCellRenderer());

		add(box);
	}
	
	public static void main(String[] args) {
		JFrame f = new TableCombo();
		f.setPreferredSize(new Dimension(500,80));
		f.pack();
		f.setLocationRelativeTo(null);
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);
		f.setVisible(true);
	}
}

Vejam que quando um item é selecionado, as dimensões da linha
ficam menores… Esse é meu problema, tem como configurar
a largura da linha no item selecionado?

Agradeço se puderem responder.

Criado 7 de junho de 2007
Respostas 0
Participantes 1