Ich würde gerne in einer JTable die Breite der einzelnen Spalten individuell anpassen:
Für die JTable habe ich eine eigene Klasse (KundenTableShort.java) geschrieben:
Wie man an der "prepareRenderer"-Methode sehen kann, probiere ich schon alles (?) aus, um eine Spalte größer als die anderen zu machen!
Das dazugehörige Model falls es interessant sein sollte?!
und das Panel das die JTable aufnimmt:
Auch wenn jetzt dort schon viele verschiedene Ansätze ausprobiert worden...(sorry für den schlechten Code), leider zeigt er mir immer gleich große Spalten an!!!
Irgendjemand eine Idee, woran das liegen könnte...???!!!
PS:
folgender Code funzt bei mir auch...also ich brauche -wenn möglich- genau zu dem o.g. Problem die Lösung.
Für die JTable habe ich eine eigene Klasse (KundenTableShort.java) geschrieben:
Wie man an der "prepareRenderer"-Methode sehen kann, probiere ich schon alles (?) aus, um eine Spalte größer als die anderen zu machen!
Java:
package view.table;
import java.awt.Color;
import java.awt.Component;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
public class KundenTableShort extends JTable {
private static final long serialVersionUID = 1L;
private JTableHeader header;
public KundenTableShort() {
header = getTableHeader();
header.setBackground(Color.GRAY);
header.setForeground(Color.BLACK);
header.setFont(new Font("Arial", Font.CENTER_BASELINE, 13));
}
public Component prepareRenderer(TableCellRenderer renderer, int index_row,
int index_col) {
Component comp = super.prepareRenderer(renderer, index_row, index_col);
if (index_col == 3) {
comp.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
comp.setPreferredSize(new Dimension(20, 20));
comp.setMaximumSize(new Dimension(20, 20));
comp.setMinimumSize(new Dimension(20, 20));
} else {
comp.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
comp.setPreferredSize(new Dimension(200, 20));
comp.setMaximumSize(new Dimension(200, 20));
comp.setMinimumSize(new Dimension(200, 20));
}
return comp;
}
}
Das dazugehörige Model falls es interessant sein sollte?!
Java:
package view.table;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
import model.Kunde;
import util.A;
import view.panel.interneKundenPanel.KundenPanelKundeChange;
import view.panel.interneKundenPanel.KundenPanelKundeLoeschen;
import db.exceptions.DBException;
public class KundenTableModelShort extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private ArrayList<Kunde> list;
private String[] columnNames;
private Object[][] data;
private KundenPanelKundeChange kundenPanelKundeChange;
private KundenPanelKundeLoeschen kundenPanelKundeLoeschen;
public KundenTableModelShort(KundenPanelKundeChange kundenPanelKundeChange)
throws DBException {
this.kundenPanelKundeChange = kundenPanelKundeChange;
list = kundenPanelKundeChange.getKundenPanel().getMainPanel()
.getMainFrame().getMediator().getKunden();
columnNames = A.getJTabelHeadLineShort();
}
public KundenTableModelShort(
KundenPanelKundeLoeschen kundenPanelKundeLoeschen)
throws DBException {
this.kundenPanelKundeLoeschen = kundenPanelKundeLoeschen;
list = kundenPanelKundeLoeschen.getKundenPanel().getMainPanel()
.getMainFrame().getMediator().getKunden();
columnNames = A.getJTabelHeadLineShort();
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public int getRowCount() {
return list.size();
}
@Override
public Object getValueAt(int arg0, int arg1) {
Kunde k = list.get(arg0);
arg1++;
if (arg1 == 0) {
return k.getAnrede();
} else if (arg1 == 1) {
return k.getNachname();
} else if (arg1 == 2) {
return k.getVorname();
} else if (arg1 == 3) {
return k.getStrasse();
} else if (arg1 == 4) {
return k.getPlz();
} else if (arg1 == 5) {
return k.getOrt();
}
return "";
}
public boolean isCellEditable(int row, int col) {
return false;
}
public Object[][] getData() {
return data;
}
public ArrayList<Kunde> getList() {
return list;
}
public KundenPanelKundeChange getKundenPanelKundeChange() {
return kundenPanelKundeChange;
}
public void setList(ArrayList<Kunde> list) {
this.list = list;
}
public KundenPanelKundeLoeschen getKundenPanelKundeLoeschen() {
return kundenPanelKundeLoeschen;
}
}
und das Panel das die JTable aufnimmt:
Java:
package view.panel.interneKundenPanel;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableColumn;
import view.listener.KundenTableListenerShort;
import view.panel.GradientPanel;
import view.panel.KundenPanel;
import view.table.KundenTableModelShort;
import view.table.KundenTableShort;
import db.exceptions.DBException;
public class KundenPanelKundeChange extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
private KundenTableShort kundenTable;
private KundenTableModelShort kTModel;
private KundenTableListenerShort ktlistener;
private KundenPanel kundenPanel;
private static final String ID = "CHANGE";
public KundenPanelKundeChange(KundenPanel kundenPanel) {
this.kundenPanel = kundenPanel;
JPanel jp = new GradientPanel();
setLayout(new GridLayout());
jp.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
kundenTable = new KundenTableShort();
try {
kTModel = new KundenTableModelShort(this);
} catch (DBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
kundenTable.setModel(kTModel);
ktlistener = new KundenTableListenerShort(kundenTable, ID);
kundenTable.addMouseListener(ktlistener);
kundenTable.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
TableColumn column = kundenTable.getColumnModel().getColumn(0);
column.setPreferredWidth(5);
column.setMinWidth(5);
column.setMaxWidth(5);
column = kundenTable.getColumnModel().getColumn(1);
column.setPreferredWidth(150);
column.setMinWidth(150);
column.setMaxWidth(150);
//
kundenTable.setRowHeight(20);
// //set specific row height
kundenTable.setRowHeight(2, 50);
// //Select single cell
kundenTable.setAutoscrolls(true);
kundenTable.setBorder(BorderFactory.createBevelBorder(0));
kundenTable
.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
kundenTable.setAutoCreateRowSorter(true);
TableColumn colun = kundenTable.getColumn("PLZ");
colun.setWidth(10);
colun.setMaxWidth(10);
colun.setMinWidth(10);
colun.setPreferredWidth(10);
colun = kundenTable.getColumn("Name");
colun.setWidth(200);
colun.setMaxWidth(200);
colun.setMinWidth(200);
colun.setPreferredWidth(200);
JScrollPane jsp = new JScrollPane(kundenTable);
c.anchor = GridBagConstraints.NORTH;
jp.add(jsp, c);
add(jsp);
}
public KundenTableShort getKundenTable() {
return kundenTable;
}
public KundenTableModelShort getKTModel() {
return kTModel;
}
public void setKTModel(KundenTableModelShort model) {
kTModel = model;
}
public static String getID() {
return ID;
}
public void refresh() {
try {
kTModel = new KundenTableModelShort(this);
} catch (DBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
kundenTable.setModel(kTModel);
this.validate();
}
public KundenTableListenerShort getKtlistener() {
return ktlistener;
}
public void setKtlistener(KundenTableListenerShort ktlistener) {
this.ktlistener = ktlistener;
}
public KundenPanel getKundenPanel() {
return kundenPanel;
}
public void setKundenPanel(KundenPanel kundenPanel) {
this.kundenPanel = kundenPanel;
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
public void setKundenTable(KundenTableShort kundenTable) {
this.kundenTable = kundenTable;
}
}
Auch wenn jetzt dort schon viele verschiedene Ansätze ausprobiert worden...(sorry für den schlechten Code), leider zeigt er mir immer gleich große Spalten an!!!
Irgendjemand eine Idee, woran das liegen könnte...???!!!
PS:
folgender Code funzt bei mir auch...also ich brauche -wenn möglich- genau zu dem o.g. Problem die Lösung.
Java:
public class setRowHightAndColBidth {
public static void main(String[] args) {
new setRowHightAndColBidth();
}
public setRowHightAndColBidth() {
JFrame frame = new JFrame("Creating JTable Component Example!");
JPanel panel = new JPanel();
String data[][] = { { "vinod", "BCA", "A" }, { "Raju", "MCA", "b" },
{ "Ranjan", "MBA", "c" }, { "Rinku", "BCA", "d" },
{ "Rama anuj pathak tiwari", "PGDCA", "e" } };
String col[] = { "Name", "Course", "Grade" };
JTable table = new JTable(data, col);
// first column width
TableColumn column = table.getColumnModel().getColumn(0);
column.setPreferredWidth(150);
// set all rows height
table.setRowHeight(20);
// set specific row height
table.setRowHeight(2, 50);
// Select single cell
table.setCellSelectionEnabled(true);
panel.add(table, BorderLayout.CENTER);
frame.add(panel);
frame.setSize(300, 200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}