import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingWorker;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class TableVerlauf extends JFrame
{
private JPanel contentPane;
private JScrollPane scrollPane;
private JTable table;
private JPanel panel;
private JButton btnChooseTopColor;
private JButton btnChooseBottomColor;
private VerlaufsTableCellRenderer renderer;
private DefaultTableModel model;
private JButton button;
private JButton button_1;
/**
* Launch the application.
*/
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
TableVerlauf frame = new TableVerlauf();
frame.setVisible(true);
} catch (Exception e)
{
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public TableVerlauf()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.CENTER);
table = new JTable();
model=new DefaultTableModel(
new Object[][] {
{"1", null, null},
{"2", null, null},
{"3", null, null},
{"4", null, null},
{"5", null, null},
{"6", null, null},
{"7", null, null},
{"8", null, null},
{"9", null, null},
{"10", null, null},
},
new String[] {
"A", "B", "C"
}
);
table.setModel(model);
renderer=new VerlaufsTableCellRenderer();
table.setDefaultRenderer(Object.class, renderer);
scrollPane.setViewportView(table);
panel = new JPanel();
contentPane.add(panel, BorderLayout.SOUTH);
btnChooseTopColor = new JButton("Choose Top Color");
btnChooseTopColor.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
Color col=JColorChooser.showDialog(TableVerlauf.this, "Top Color", renderer.getTop());
FadeColorWorker worker=new FadeColorWorker(col,true);
worker.execute();
}
});
panel.add(btnChooseTopColor);
btnChooseBottomColor = new JButton("Choose Bottom Color");
btnChooseBottomColor.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
Color col=JColorChooser.showDialog(TableVerlauf.this, "Top Color", renderer.getTop());
FadeColorWorker worker=new FadeColorWorker(col,false);
worker.execute();
}
});
panel.add(btnChooseBottomColor);
button = new JButton("+");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
int selectedRow=table.getSelectedRow();
if(selectedRow<0)
{
selectedRow=table.getRowCount();
}
model.insertRow(selectedRow,new Object[] {model.getRowCount()+1,null,null});
}
});
panel.add(button);
button_1 = new JButton("-");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
int selectedRow=table.getSelectedRow();
if(selectedRow<0)
{
selectedRow=table.getRowCount()-1;
}
if(selectedRow>-1)
{
model.removeRow(selectedRow);
}
}
});
panel.add(button_1);
}
class VerlaufsTableCellRenderer extends DefaultTableCellRenderer
{
public void setTop(Color c)
{
top=c;
}
public void setBottom(Color c)
{
bottom=c;
}
Color top=new Color(50,100,200),bottom=new Color(200,230,170);
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column)
{
Component c=super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
float alpha=(float) row/table.getRowCount();
Color col=getColorBetween(top,bottom,alpha);
c.setBackground(col);
return c;
}
public Color getTop()
{
return top;
}
public Color getBottom()
{
return bottom;
}
}
class FadeColorWorker extends SwingWorker
{
Color newColor, oldColor;
boolean isTop;
FadeColorWorker(Color col, boolean top)
{
newColor=col;
isTop=top;
if(isTop)
{
oldColor=renderer.getTop();
}
else
{
oldColor=renderer.getBottom();
}
}
@Override
protected Object doInBackground() throws Exception
{
for(int i=0;i<10;i++)
{
float alpha=(float) i/10;
Color col=getColorBetween(oldColor,newColor,alpha);
if(isTop)
{
renderer.setTop(col);
}
else
{
renderer.setBottom(col);
}
table.repaint();
Thread.sleep(100);
}
return null;
}
}
private Color getColorBetween(Color c1, Color c2,float alpha)
{
int r=(int) (c1.getRed() - (c1.getRed()-c2.getRed())*alpha);
int g=(int) (c1.getGreen() - (c1.getGreen()-c2.getGreen())*alpha);
int b=(int) (c1.getBlue() - (c1.getBlue()-c2.getBlue())*alpha);
return new Color(r,g,b);
}
}