AndreArnold
Grünschnabel
Hallo,
ich arbeite noch nicht lange mit Swing und muss eine JTable implementieren. Wenn ich rechtsklick auf die Zellen mache geht ein PopupMenü auf, soweit klappt es dank eines eurer tutorials schon. In diesem Popup sind mehrere Funktionen hinterlegt die eigentlich nur folgendes machen sollen: die Zelle auf der der Rechtsklick erfolgte je nach Wahl der Methode
einfärben. Habe schon im FOrum rumgesucht und die Renderergeschichte gefunden. Ich steig nur leider nicht richtig dahinter, wie ich es zu implementieren habe.
Habe andere Quellen ausgenutzt und in einer steht geschrieben dass der renderer immer aufgerufen wird wenn eine tabelle darzustellen ist und seeehr viel garbage dadurch anfällt. Ich möchte aber immer nur einzelne Zellen farbig markieren lassen und die Zeilennummer in ein Array testArray[row] geschrieben wird. Das Array kann max 30 Werte aufnehmen(die JTable wird dann in der Applikation max 30 Spalten haben können).
Ich poste mal den Quelltext den ich bisher habe mit, vielleicht kann mir jemand die fehlenden 3-4 zeilen ergänzen, damit ich ein funktionierendes Beispiel habe und versuchen kann das Ganze zu verstehen.
ich arbeite noch nicht lange mit Swing und muss eine JTable implementieren. Wenn ich rechtsklick auf die Zellen mache geht ein PopupMenü auf, soweit klappt es dank eines eurer tutorials schon. In diesem Popup sind mehrere Funktionen hinterlegt die eigentlich nur folgendes machen sollen: die Zelle auf der der Rechtsklick erfolgte je nach Wahl der Methode
einfärben. Habe schon im FOrum rumgesucht und die Renderergeschichte gefunden. Ich steig nur leider nicht richtig dahinter, wie ich es zu implementieren habe.
Habe andere Quellen ausgenutzt und in einer steht geschrieben dass der renderer immer aufgerufen wird wenn eine tabelle darzustellen ist und seeehr viel garbage dadurch anfällt. Ich möchte aber immer nur einzelne Zellen farbig markieren lassen und die Zeilennummer in ein Array testArray[row] geschrieben wird. Das Array kann max 30 Werte aufnehmen(die JTable wird dann in der Applikation max 30 Spalten haben können).
Ich poste mal den Quelltext den ich bisher habe mit, vielleicht kann mir jemand die fehlenden 3-4 zeilen ergänzen, damit ich ein funktionierendes Beispiel habe und versuchen kann das Ganze zu verstehen.
Code:
import java.awt.Point;
import java.awt.Component;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer;
/**
* @author Darimont
*
*/
public class JTableExample
extends JFrame
implements MouseListener{
private JTable table;
private int[] testArray;
public JTableExample() {
super("JTableExample");
setDefaultCloseOperation(EXIT_ON_CLOSE);
Object[][] rowData = { { "1", "a", "c" }, { "2", "b", "b" },
{ "3", "f", "r" }, { "4", "q", "a" }, { "5", "w", "z" },
{ "6", "c", "a" }, { "7", "a", "q" } };
final Object[] columnHeaders = { "ID", "Header1", "Header2" };
testArray = new int[30];
table = new JTable(rowData, columnHeaders);
table.addMouseListener(this);
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
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);
/*hier weiss ich nicht genau was rein muss*/
if (true) {
setBackground(Color.RED);
} else {
setBackground(Color.WHITE);
}
return this;
}
});
add(new JScrollPane(table));
pack();
setVisible(true);
}
/**
* @param args
*/
public void mouseEntered(MouseEvent event) {
}
public void mouseExited(MouseEvent event) {
}
public void mouseReleased(MouseEvent event) {
}
public void mouseClicked(MouseEvent event) {
}
public void mousePressed(MouseEvent event) {
if (SwingUtilities.isRightMouseButton(event)) {
Point p = event.getPoint();
javax.swing.JPopupMenu popup = new javax.swing.JPopupMenu();
javax.swing.JMenuItem shortStart = new javax.swing.JMenuItem("Short: start");
shortStart.addMouseListener(this);
shortStart.setName("stopStart");
javax.swing.JMenuItem shortStop = new javax.swing.JMenuItem("Short: stop");
shortStop.addMouseListener(this);
shortStop.setName("shortStop");
javax.swing.JMenuItem shortTarget = new javax.swing.JMenuItem("Short: target");
shortTarget.addMouseListener(this);
shortTarget.setName("shortTarget");
//seperator
javax.swing.JMenuItem longStart = new javax.swing.JMenuItem("Long: start");
longStart.addMouseListener(this);
longStart.setName("longStart");
javax.swing.JMenuItem longStop = new javax.swing.JMenuItem("Long: stop");
longStop.addMouseListener(this);
longStop.setName("longStop");
javax.swing.JMenuItem longTarget = new javax.swing.JMenuItem("Long: target");
longTarget.addMouseListener(this);
longTarget.setName("longTarget");
popup.add(shortStart);
popup.add(shortStop);
popup.add(shortTarget);
popup.addSeparator();
popup.add(longStart);
popup.add(longStop);
popup.add(longTarget);
popup.show(event.getComponent(),
event.getX(),
event.getY()
);
}
if (SwingUtilities.isLeftMouseButton(event)) {
//String objekt = event.getActionCommand();
Point p = event.getPoint();
int row = table.rowAtPoint(p);
int column = table.columnAtPoint(p);
String name = event.getComponent().getName();
if(name.equals("shortStart")){
setStart(row,column,"Short");
}
else if(name.equals("shortStop")){
// setStop(row,column,"Short");
}
else if(name.equals("shortTarget")){
//setTarget(row,column,"Short");
}
else if(name.equals("longStart")){
setStart(row,column,"Long");
}
else if(name.equals("longStop")){
//setStop(row,column,"Long");
}
else if(name.equals("longTarget")){
//setTarget(row,column,"Long");
}
}
}
private void setStart(int ebene, int wert, String seite){
if(seite.equals("short")){
}
else {
}
}
public static void main(String[] args) {
new JTableExample();
}
}