LookAndFeel Cell Renderer für JTable bei Nimbus Look and Feel

Borg

Mitglied
Hallo!

Ich habe hier ein kleines Problem mit meinem CellRenderer nachdem ich mein Programm auf das Nimbus Look and Feel umgestellt habe.

Es geht darum in einer Tabellenzelle mehrere Zeilen anzuzeigen. Mit dem default-Look and Feel funktionierts einwandfrei, beim Nimbus (oder auch Windows) Look and Feel wird die ganze Tabelle zerschossen.

Woran kann das liegen?

Im Anhang findet Ihr einen Screenshot wie die Tabelle aussieht.

Code des Cell Renderer:
Java:
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.TableCellRenderer;

public class InfoCellRenderer extends JTextArea implements TableCellRenderer {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {

		setText(value.toString()); // Value kann String mit \n enthalten

		return this;

	}

}

Klasse, die den Cell Renderer verwendet:

Java:
package GUI.panels;

import java.awt.BorderLayout;
import java.util.StringTokenizer;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import prog.InfoCellRenderer;
import constants.Const;

public class DetailedCycleInformationPanel extends JPanel {
	private JScrollPane scrollPane = new JScrollPane();
	private JTable table;

	public DetailedCycleInformationPanel(int cycleID) {
		this.setLayout(new BorderLayout());

		String[] colNames = { Const.bundle.getString("cycleDayShort"), "°C",
				Const.bundle.getString("meds"),
				Const.bundle.getString("disturbingFactors"),
				Const.bundle.getString("notes") };

		String[][] rowData = Const.mainProg
				.getDetailedCycleInformation(cycleID);

		InfoCellRenderer icr = new InfoCellRenderer();

		table = new JTable(rowData, colNames);
		table.setDefaultRenderer(Object.class, icr);

		for (int i = 0; i < rowData.length; i++) {
			StringTokenizer st = new StringTokenizer(rowData[i][3], "\n");
			if (st.countTokens() > 1) {
				//table.setRowHeight(i, (st.countTokens() - 1) * 35);
			}

		}

		table.getColumnModel().getColumn(0).setMinWidth(30);
		table.getColumnModel().getColumn(0).setMaxWidth(30);
		table.getColumnModel().getColumn(1).setMinWidth(70);
		table.getColumnModel().getColumn(1).setMaxWidth(70);
		this.scrollPane.setViewportView(table);

		this.add(scrollPane, BorderLayout.CENTER);

	}

}

Danke schonmal.

Viele Grüße
 

Anhänge

  • screen1.png
    screen1.png
    9,2 KB · Aufrufe: 36
Machst du das hier nachdem du das Look and Feel wechselst?

Changing the Look and Feel After Startup
You can change the L&F with setLookAndFeel even after the program's GUI is visible. To make existing components reflect the new L&F, invoke the SwingUtilities updateComponentTreeUI method once per top-level container. Then you might wish to resize each top-level container to reflect the new sizes of its contained components. For example:

UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();
 
Habe ich auch schon probiert, jedoch ohne Erfolg. Ich denke, dass es jedoch nicht nötig ist, da ich das L&F setze bevor das Frame erstellt wird (oder habe ich hier einen Denkfehler?).
 

Zurück
Oben