MultiLine in JTable

Crai

Mitglied
Hallo zusammen,

ich hab in meiner JTable eine Zelle, die einen Kommentar enthalten kann.
Den kann natürlich der Anwender eingeben. Ihm soll es aber auch möglich sein, mit Enter
in ne neue Zeile zu springen und diesen Kommentar nun beliebig viele Zeilen lang machen zu können.
Dazu hab ich mich umgesehen und zB das hier gefunden:
MultiLine Cell

Dieses Beispiel is ja auch ganz net, aber nur, wie viele andre auch, nur wenn die Daten per Programm in die Zelle geschrieben werden, nicht aber vom Anwender.

Wie müsste ich nun vom Prinzip her vorgehen, um dies dem Anwender zu ermöglichen?
Etwa:
- ein CellRenderer mit JTextArea als Komponente, das setLineWrap(true)
- dann das ENTER per Action der Table abfangen, rausfinden in welcher Zelle das war,
- und dann verhindern das endEditing() aufgerufen wird ?

Is das richtig

Vielen Dank,
CU Crai
 
>Hallo zusammen,
>ich hab in meiner JTable eine Zelle, die einen Kommentar enthalten kann.
>Den kann natürlich der Anwender eingeben. Ihm soll es aber auch möglich sein, mit Enter
in ne neue Zeile zu springen und diesen Kommentar nun beliebig viele Zeilen lang machen zu können.
>Dazu hab ich mich umgesehen und zB das hier gefunden:
MultiLine Cell

>Dieses Beispiel is ja auch ganz net, aber nur, wie viele andre auch, nur wenn die Daten per Programm in die Zelle geschrieben werden, nicht aber vom Anwender.

>Wie müsste ich nun vom Prinzip her vorgehen, um dies dem Anwender zu ermöglichen?
>Etwa:
>- ein CellRenderer mit JTextArea als Komponente, das setLineWrap(true)

Muss das nicht eher der CellEditor sein? Schliesslich editierst Du ja.

>- dann das ENTER per Action der Table abfangen, rausfinden in welcher Zelle das war,

Jo, klingt plausibel.

>- und dann verhindern das endEditing() aufgerufen wird ?

IIRC heißt das stopCellEditing() oder cancelCellEditing() (bei ESC).

>Is das richtig

>Vielen Dank,
>CU Crai

Jo, so würde ich zunächst vorgehen.
 
Jo, danke das wollt ich wissen, klar ich mein natürlich den CellEditor! :)

Dann schau ich mal,ob ich das hinkrieg....

CU Crai
 
so, nun ganz so locker flockig gehts nun doch nicht.
kann zwar, das ENTER vom Benutzer abfangen, stopCellEditing() verhindern, auch beginnt
die JTextArea eine neue Zeile, nur vergrößert sich nicht die entsprechende Zelle der JTable. Habs schon mit repaint() versucht, will aber nicht...

Was kann man da tun?

CU
Crai

Code:
	public class MyMultLineCellEditor extends AbstractCellEditor implements TableCellEditor 
	{
		private JTextArea textArea = null;
		public MyMultLineCellEditor()
		{
			if (textArea == null)
			{
				textArea = new JTextArea();
				textArea.setLineWrap(true);
				textArea.setWrapStyleWord(true);
				textArea.addKeyListener(new KeyListener()
				{
					public void keyPressed(KeyEvent e) 
					{
						if (e.getKeyCode() == KeyEvent.VK_ENTER && getJTable().getEditingColumn() == getJTable().getColumn(GUIHelper.s_sComment).getModelIndex())
						{
							((MyTable)getJTable()).setEnterStatus(true); //wenn EnterStatus == true KEIN stopCellEditing()
							textArea.setText(textArea.getText() + '\n');
						}
					};
					public void keyTyped(KeyEvent e) {};
					public void keyReleased(KeyEvent e) {};
				}
				);
				
			}
		}
	
		public Component getTableCellEditorComponent(JTable table, Object value,
		boolean isSelected, int rowIndex, int vColIndex) 
		{
			textArea.setText(table.getValueAt(rowIndex,vColIndex).toString());

			return textArea;
		}
	
		public Object getCellEditorValue() 
		{
			return textArea.getText();
		}
	

	}
 

Neue Beiträge

Zurück