Hallo zusammen.
Ich habe mir auf die dauer nen schönen Quelltext zusammen geklaut und umgebastelt, nur glaube ich das ich den Überblick verloren habe :-(
Ich würde gerne beim klick auf den Buttons in der Tabelle die TextArea aktualisieren,
aber nach 2 Tagen hab ich das jetzt aufgegeben wie das gehen soll.
Ausserdem soll der Panel nacher in einem anderem Frame dargestellt werden neben anderen Panels. Ich weis nicht ob das wichtig ist.
Gedanken habe ich dazu ohne Ende, nur fehlt mir wohl noch ein wenig das KnowHow.
Wäre nett wenn mir wer helfen könnte.
Ich habe mir auf die dauer nen schönen Quelltext zusammen geklaut und umgebastelt, nur glaube ich das ich den Überblick verloren habe :-(
Ich würde gerne beim klick auf den Buttons in der Tabelle die TextArea aktualisieren,
aber nach 2 Tagen hab ich das jetzt aufgegeben wie das gehen soll.
Ausserdem soll der Panel nacher in einem anderem Frame dargestellt werden neben anderen Panels. Ich weis nicht ob das wichtig ist.
Gedanken habe ich dazu ohne Ende, nur fehlt mir wohl noch ein wenig das KnowHow.
Wäre nett wenn mir wer helfen könnte.
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class Buttontabelle extends JPanel
{
private static final long serialVersionUID = 1L;
private boolean DEBUG = false;
String ausgabe = "Test";
Buttontabelle()
{
super(new GridLayout(1,0));
// post("Test geht");
// }
//
// public Component post(String ausgabe)
// {
JTable table = new JTable(new MyTableModel());
JTextArea textArea = new JTextArea();
textArea.setEditable(false);
textArea.append(ausgabe);
initColumnSizes(table);
JScrollPane scrollPane1 = new JScrollPane( table );
JScrollPane scrollPane2 = new JScrollPane( textArea );
JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,scrollPane1 ,scrollPane2 );
add(splitPane);
new ButtonColumn(table, 4);
// return splitPane;
}
private void initColumnSizes(JTable table)
{
MyTableModel model = (MyTableModel)table.getModel();
TableColumn column = null;
Component comp = null;
int headerWidth = 0;
int cellWidth = 0;
Object[] longValues = model.longValues;
TableCellRenderer headerRenderer = table.getTableHeader().getDefaultRenderer();
for (int i = 0; i < 5; i++)
{
column = table.getColumnModel().getColumn(i);
comp = headerRenderer.getTableCellRendererComponent(null, column.getHeaderValue(),false, false, 0, 0);
headerWidth = comp.getPreferredSize().width;
comp = table.getDefaultRenderer(model.getColumnClass(i)).getTableCellRendererComponent(table, longValues[i],false, false, 0, i);
cellWidth = comp.getPreferredSize().width;
if (DEBUG)
{
System.out.println("Initializing width of column"+i+". headerWidth = "+headerWidth+"; cellWidth = "+cellWidth);
}
column.setPreferredWidth(Math.max(headerWidth, cellWidth));
}
}
class MyTableModel extends AbstractTableModel
{
private static final long serialVersionUID = 1L;
Object[][] data = {{"Sonja", "Opologisch","Rumstehen","Sat May 13 09:27:46 CEST 2006","Sehen"},{"Sonja", "Opologisch","Rumstehen","Sat May 13 09:27:46 CEST 2006","Sehen"},{"Sonja", "Opologisch","Rumstehen","Sat May 13 09:27:46 CEST 2006","Sehen"}};
String[] columnNames = {"Vor","Nach","Sonstiges","Datum","Sehen"};
public final Object[] longValues = {"Sonja", "Opologisch","Rumstehen","Sat May 13 09:27:46 CEST 2006","Sehen"};
public int getColumnCount() {return columnNames.length;}
public int getRowCount() {return data.length;}
public String getColumnName(int col) {return columnNames[col];}
public Object getValueAt(int row, int col) {return data[row][col];}
public Class<?> getColumnClass(int c)
{
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col)
{
if (col < 4)
{
return false;
}
else
{
return true;
}
}
public void setValueAt(Object value, int row, int col)
{
if (DEBUG)
{
System.out.println("Setting value at "+row+","+col+" to "+value+" (an instance of "+value.getClass()+")");
}
data[row][col] = value;
fireTableCellUpdated(row, col);
if (DEBUG)
{
System.out.println("New value of data:");
printDebugData();
}
}
private void printDebugData()
{
int numRows = getRowCount();
int numCols = getColumnCount();
for (int i=0; i < numRows; i++)
{
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++)
{
System.out.print(" " + data[i][j]);
}
System.out.println();
}
System.out.println("--------------------------");
}
}
class ButtonColumn extends AbstractCellEditor implements TableCellRenderer, TableCellEditor, ActionListener
{
private static final long serialVersionUID = 1L;
JTable table;
JButton renderButton;
JButton editButton;
String text;
public ButtonColumn(JTable table, int column)
{
super();
this.table = table;
renderButton = new JButton();
editButton = new JButton();
editButton.setFocusPainted( false );
editButton.addActionListener( this );
TableColumnModel columnModel = table.getColumnModel();
columnModel.getColumn(column).setCellRenderer( this );
columnModel.getColumn(column).setCellEditor( this );
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
if (hasFocus)
{
renderButton.setForeground(table.getForeground());
renderButton.setBackground(UIManager.getColor("Button.background"));
}
else if (isSelected)
{
renderButton.setForeground(table.getSelectionForeground());
renderButton.setBackground(table.getSelectionBackground());
}
else
{
renderButton.setForeground(table.getForeground());
renderButton.setBackground(UIManager.getColor("Button.background"));
}
renderButton.setText( (value == null) ? "" : value.toString() );
return renderButton;
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
{
text = (value == null) ? "" : value.toString();
editButton.setText( text );
return editButton;
}
public Object getCellEditorValue()
{
return text;
}
public void actionPerformed(ActionEvent e)
{
fireEditingStopped();
System.out.println(e.getActionCommand() + " : " + table.getSelectedRow());
ausgabe=(e.getActionCommand() + " : " + table.getSelectedRow());
}
}
public static void main(String[] args)
{
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("Testfenster");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Buttontabelle newContentPane = new Buttontabelle();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
}
Zuletzt bearbeitet: