Guten Tag,
ich habe ein JTable und diese beinhaltet JButtons. Wenn ich nun einen Button klicke öffnet sich ein JDialog. Wenn ich diesen dann wieder schließe kann ich nicht mehr die Reihen markieren. Die Markierung bleibt starr auf der Reihe die vor dem Vorgang markiert wurde.
Anbei die Codes.
Vielen Dank schon einmal im vorraus.
Klasse mit der Tabelle
Tablemodel
Celleditor
Cellrenderer
ich habe ein JTable und diese beinhaltet JButtons. Wenn ich nun einen Button klicke öffnet sich ein JDialog. Wenn ich diesen dann wieder schließe kann ich nicht mehr die Reihen markieren. Die Markierung bleibt starr auf der Reihe die vor dem Vorgang markiert wurde.
Anbei die Codes.
Vielen Dank schon einmal im vorraus.
Klasse mit der Tabelle
Java:
public JPanel_IoModul(ServerInterface server, final Class_SQLCon sql) throws ParseException {
Vector<String> vec = new Vector<String>();
vec.add("4");
vec.add("8");
vec.add("12");
jcrelc = new JComboBox(vec);
jtip = new JTextField();
this.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
tm_io = new TableModel_IOModul(sql);
tabelle = new JTable(tm_io);
tabelle.setDefaultRenderer(Object.class, new TableCellRenderer_Renderer());
tabelle.setDefaultRenderer(String.class, new DefaultTableCellRenderer());
tabelle.setDefaultEditor(JButton.class, new TableCellEditor_JButton());
updateTable(sql);
JScrollPane scroll = new JScrollPane(tabelle);
tabelle.setRowHeight(25);
tabelle.doLayout();
//Farbe Darstellung
tabelle.getColumnModel().getColumn(4).setMaxWidth(50);
//Farbe Auswahl
tabelle.getColumnModel().getColumn(5).setMaxWidth(50);
Tablemodel
Java:
public class TableModel_IOModul implements TableModel {
Vector<IOModul> data = null;
IOModul rows = null;
private Vector<TableModelListener> listener = null;
Class_SQLCon sql = null;
private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(TableModel_Kamera.class);
public TableModel_IOModul(Class_SQLCon sql) {
this.sql = sql;
data = new Vector<IOModul>();
rows = null;
listener = new Vector<TableModelListener>();
}
public void updateData(Vector v2) {
data.removeAllElements();
data = v2;
fireTableModelChanged();
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public int getColumnCount() {
return 6;
}
@Override
public String getColumnName(int column) {
switch (column) {
case 0:
return "ID";
case 1:
return "Name";
case 2:
return "Beschreibung";
case 3:
return "IP";
case 4:
return "Web";
case 5:
return "Detail";
default:
return null;
}
}
@Override
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case 0:
return String.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return String.class;
case 4:
return JButton.class;
case 5:
return JButton.class;
default:
return null;
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 4 || columnIndex == 5) {
return true;
} else {
return false;
}
}
@Override
public Object getValueAt(final int rowIndex, int columnIndex) {
rows = data.get(rowIndex);
switch (columnIndex) {
case 0:
return sql.getIoModulID(rows);
case 1:
return rows.getName();
case 2:
return rows.getBeschreibung();
case 3:
return rows.getIP();
case 4:
JButton jb_web = new JButton(new ImageIcon(getClass().getResource("/resources/Web.png")));
jb_web.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
String ip = (String) TableModel_IOModul.this.getValueAt(rowIndex, 3);
Desktop.getDesktop().browse(new URI("http://" + ip));
} catch (IOException ex) {
LOG.error(ex.getMessage());
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "Fehler: Fehler in der URL! Überprüfen Sie die Ip-Adresse");
} catch (URISyntaxException ex) {
ex.printStackTrace();
LOG.error(ex.getMessage());
JOptionPane.showMessageDialog(null, "Fehler: Fehler in der URL! Überprüfen Sie die Ip-Adresse");
}
}
});
return jb_web;
case 5:
JButton jb_detail = new JButton(new ImageIcon(getClass().getResource("/resources/Testen.png")));
jb_detail.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
int id = (int) TableModel_IOModul.this.getValueAt(rowIndex, 0);
JDialog_IoModulDetail ioDetail = new JDialog_IoModulDetail(sql.getIoModul(id), sql);
ioDetail.setVisible(true);
} catch (Exception ex) {
ex.printStackTrace();
LOG.error(ex.getMessage());
JOptionPane.showMessageDialog(null,
"Das IO-Modul ist nicht verfügbar.",
"IO-Modul",
JOptionPane.YES_OPTION);
}
}
});
return jb_detail;
default:
return null;
}
}
@Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
}
@Override
public void addTableModelListener(TableModelListener l) {
listener.add(l);
}
@Override
public void removeTableModelListener(TableModelListener l) {
listener.remove(l);
}
public void fireTableModelChanged() {
for (TableModelListener l : listener) {
l.tableChanged(new TableModelEvent(this));
}
}
}
Celleditor
Java:
class TableCellEditor_JButton extends AbstractCellEditor implements TableCellEditor{
JButton button;
String txt;
public TableCellEditor_JButton() {
super();
button = new JButton();
button.setOpaque(true);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Buttontext: " + button.getText());
}
});
}
public Object getCellEditorValue() {
return null;
}
public boolean isCellEditable(EventObject anEvent) {
return true;
}
public boolean shouldSelectCell(EventObject anEvent) {
return false;
}
public boolean stopCellEditing() {
return super.stopCellEditing();
}
public void cancelCellEditing() {
}
public void addCellEditorListener(CellEditorListener l) {
}
public void removeCellEditorListener(CellEditorListener l) {
}
public Component getTableCellEditorComponent(JTable table, Object value,boolean isSelected, int row, int column) {
txt = (value == null) ? "" : value.toString();
button.setText(txt);
return (JButton)value;
}
}
Cellrenderer
Java:
public class TableCellRenderer_Renderer extends JLabel implements TableCellRenderer {
private Color colorSelected = new Color(51, 153, 255);
private Color colorFocus = new Color(255, 200, 200);
private Color colorNormal = new Color(200, 200, 255);
private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(TableCellRenderer_Renderer.class);
public TableCellRenderer_Renderer() {
setOpaque(true);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Color) {
Color color = (Color) value;
setBackground(color);
setForeground(Color.black);
setText(color == Color.green ? "Ruhemodus" : "Aktiviert");
} else if (value instanceof JButton) {
return (JButton) value;
} else if (value instanceof JComboBox) {
return (JComboBox) value;
}
if (isSelected) {
setBackground(colorSelected);
setForeground(Color.black);
}
return this;
}
}