mirror of
https://github.com/processing/processing4.git
synced 2026-06-16 04:26:26 +02:00
JTable is ready :)
This commit is contained in:
@@ -21,17 +21,40 @@
|
||||
*/
|
||||
package processing.app.contrib;
|
||||
|
||||
import java.util.*;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.EventQueue;
|
||||
import java.awt.GridBagLayout;
|
||||
import java.awt.Rectangle;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.*;
|
||||
import javax.swing.event.*;
|
||||
|
||||
import java.awt.*;
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.GroupLayout;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JTable;
|
||||
import javax.swing.JTextPane;
|
||||
import javax.swing.ListSelectionModel;
|
||||
import javax.swing.Scrollable;
|
||||
import javax.swing.SwingConstants;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.event.HyperlinkEvent;
|
||||
import javax.swing.event.HyperlinkListener;
|
||||
import javax.swing.table.DefaultTableCellRenderer;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
|
||||
import processing.app.Base;
|
||||
import processing.app.ui.Toolkit;
|
||||
|
||||
|
||||
// The "Scrollable" implementation and its methods here take care of preventing
|
||||
@@ -43,7 +66,7 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
|
||||
ContributionTab contributionTab;
|
||||
StatusPanel statusPanel;
|
||||
TreeMap<Contribution, ContributionPanel> panelByContribution;
|
||||
TreeMap<Contribution,ContributionPanel> panelByContribution;
|
||||
|
||||
static HyperlinkListener nullHyperlinkListener = new HyperlinkListener() {
|
||||
public void hyperlinkUpdate(HyperlinkEvent e) { }
|
||||
@@ -55,6 +78,8 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
private ContributionFilter filter;
|
||||
// private ContributionListing contribListing;
|
||||
private ContributionListing contribListing = ContributionListing.getInstance();
|
||||
private JTable table;
|
||||
DefaultTableModel dtm;
|
||||
|
||||
|
||||
public ContributionListPanel(ContributionTab contributionTab,
|
||||
@@ -78,17 +103,178 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
setBackground(UIManager.getColor("List.background"));
|
||||
}
|
||||
|
||||
panelByContribution = new TreeMap<Contribution, ContributionPanel>(
|
||||
contribListing.getComparator());
|
||||
panelByContribution = new TreeMap<Contribution, ContributionPanel>(contribListing.getComparator());
|
||||
|
||||
// statusPlaceholder = new JPanel();
|
||||
// statusPlaceholder.setVisible(false);
|
||||
// status = new StatusPanel(null);
|
||||
|
||||
|
||||
dtm = new MyTableModel();
|
||||
table = new JTable(dtm){
|
||||
@Override
|
||||
public Component prepareRenderer(
|
||||
TableCellRenderer renderer, int row, int column) {
|
||||
Component c = super.prepareRenderer(renderer, row, column);
|
||||
if (isRowSelected(row)) {
|
||||
c.setBackground(Color.blue);
|
||||
} else {
|
||||
c.setBackground(Color.white);
|
||||
}
|
||||
return c;
|
||||
}
|
||||
};
|
||||
String[] colName = { "Status", "Name", "Author" };
|
||||
dtm.setColumnIdentifiers(colName);
|
||||
JScrollPane scrollPane = new JScrollPane(table);
|
||||
table.setFillsViewportHeight(true);
|
||||
table.setDefaultRenderer(Contribution.class, new StatusRendere());
|
||||
table.setRowHeight(30);
|
||||
table.setRowMargin(6);
|
||||
table.getColumnModel().setColumnMargin(-1);
|
||||
table.getColumnModel().getColumn(0).setMaxWidth(60);
|
||||
table.setShowGrid(false);
|
||||
table.setColumnSelectionAllowed(false);
|
||||
table.setCellSelectionEnabled(false);
|
||||
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
|
||||
GroupLayout layout = new GroupLayout(this);
|
||||
layout.setHorizontalGroup(layout.createParallelGroup().addComponent(scrollPane));
|
||||
layout.setVerticalGroup(layout.createSequentialGroup().addComponent(scrollPane));
|
||||
|
||||
this.setLayout(layout);
|
||||
table.setVisible(true);
|
||||
|
||||
}
|
||||
|
||||
class StatusRendere extends DefaultTableCellRenderer {
|
||||
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(JTable table, Object value,
|
||||
boolean isSelected,
|
||||
boolean hasFocus, int row,
|
||||
int column) {
|
||||
Contribution contribution = (Contribution) value;
|
||||
JLabel label = new JLabel();
|
||||
if (column == 0) {
|
||||
Icon icon = null;
|
||||
label.setBorder(BorderFactory.createEmptyBorder(0, 17, 0, 0));
|
||||
if (contribution.isInstalled()) {
|
||||
icon = UIManager.getIcon("OptionPane.warningIcon");
|
||||
if (contribListing.hasUpdates(contribution)) {
|
||||
icon = Toolkit.getLibIcon("icons/pde-16.png");
|
||||
}
|
||||
if (!contribution.isCompatible(Base.getRevision())) {
|
||||
icon = Toolkit.getLibIcon("icons/pde-16.png");
|
||||
}
|
||||
}
|
||||
label.setIcon(icon);
|
||||
if (isSelected) {
|
||||
label.setBackground(Color.BLUE);
|
||||
}
|
||||
label.setOpaque(true);
|
||||
// return table.getDefaultRenderer(Icon.class).getTableCellRendererComponent(table, icon, isSelected, false, row, column);
|
||||
} else if (column == 1) {
|
||||
JTextPane name = new JTextPane();
|
||||
name.setContentType("text/html");
|
||||
name.setEditable(false);
|
||||
name.setText("<html><body><b>" + contribution.getName() + "</b> - "
|
||||
+ contribution.getSentence() + "</body></html>");
|
||||
GroupLayout layout = new GroupLayout(label);
|
||||
|
||||
layout.setAutoCreateGaps(true);
|
||||
layout.setHorizontalGroup(layout.createSequentialGroup()
|
||||
.addComponent(name));
|
||||
layout
|
||||
.setVerticalGroup(layout.createParallelGroup().addComponent(name));
|
||||
if (table.isRowSelected(row)) {
|
||||
name.setBackground(Color.BLUE);
|
||||
name.setOpaque(true);
|
||||
}
|
||||
label.setLayout(layout);
|
||||
} else {
|
||||
JLabel icon = new JLabel(
|
||||
contribution.isSpecial() ? Toolkit
|
||||
.getLibIcon("icons/pde-16.png") : null);
|
||||
JTextPane author = new JTextPane();
|
||||
StringBuilder name = new StringBuilder("");
|
||||
String authorList = contribution.getAuthorList();
|
||||
if (authorList != null) {
|
||||
for (int i = 0; i < authorList.length(); i++) {
|
||||
|
||||
if (authorList.charAt(i) == '[' || authorList.charAt(i) == ']') {
|
||||
continue;
|
||||
}
|
||||
if (authorList.charAt(i) == '(') {
|
||||
i++;
|
||||
while (authorList.charAt(i) != ')') {
|
||||
i++;
|
||||
}
|
||||
} else {
|
||||
name.append(authorList.charAt(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
author.setText(name.toString());
|
||||
author.setEditable(false);
|
||||
author.setOpaque(false);
|
||||
if (table.isRowSelected(row)) {
|
||||
label.setBackground(Color.BLUE);
|
||||
}
|
||||
GroupLayout layout = new GroupLayout(label);
|
||||
|
||||
// layout.setAutoCreateGaps(true);
|
||||
layout.setHorizontalGroup(layout.createSequentialGroup()
|
||||
.addContainerGap().addComponent(icon).addComponent(author));
|
||||
layout.setVerticalGroup(layout
|
||||
.createParallelGroup(GroupLayout.Alignment.CENTER)
|
||||
.addComponent(author).addComponent(icon));
|
||||
label.setLayout(layout);
|
||||
label.setOpaque(true);
|
||||
}
|
||||
return label;
|
||||
}
|
||||
|
||||
}
|
||||
class MyTableModel extends DefaultTableModel{
|
||||
MyTableModel() {
|
||||
super(0,0);
|
||||
}
|
||||
@Override
|
||||
public boolean isCellEditable(int row, int column) {
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public Class<?> getColumnClass(int columnIndex) {
|
||||
// if(columnIndex == 0){
|
||||
// return Icon.class;
|
||||
// }
|
||||
// if(columnIndex == 1){
|
||||
// return String.class;
|
||||
// }
|
||||
return Contribution.class;
|
||||
}
|
||||
}
|
||||
|
||||
private void updatePanelOrdering() {
|
||||
int row = 0;
|
||||
dtm.getDataVector().removeAllElements();
|
||||
dtm.fireTableDataChanged();
|
||||
for (Entry<Contribution, ContributionPanel> entry : panelByContribution.entrySet()) {
|
||||
// ImageIcon icon = null;
|
||||
// if (entry.getKey().isInstalled()) {
|
||||
// icon = Toolkit.getLibIcon("icons/pde-16.png");
|
||||
// if (contribListing.hasUpdates(entry.getKey())) {
|
||||
// icon = Toolkit.getLibIcon("icons/pde-16.png");
|
||||
// }
|
||||
// if (!entry.getKey().isCompatible(Base.getRevision())) {
|
||||
// icon = Toolkit.getLibIcon("icons/pde-16.png");
|
||||
// }
|
||||
// }
|
||||
((DefaultTableModel)table.getModel()).addRow(new Object[]{entry.getKey(), entry.getKey(), entry.getKey()});//"<html><body><b>"
|
||||
// + entry.getKey().getName() + "</b> - " + entry.getKey().getSentence()
|
||||
// + "</body></html>"
|
||||
}
|
||||
/* int row = 0;
|
||||
for (Entry<Contribution, ContributionPanel> entry : panelByContribution.entrySet()) {
|
||||
GridBagConstraints c = new GridBagConstraints();
|
||||
c.fill = GridBagConstraints.HORIZONTAL;
|
||||
@@ -99,7 +285,7 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
|
||||
add(entry.getValue(), c);
|
||||
}
|
||||
/*
|
||||
|
||||
GridBagConstraints c = new GridBagConstraints();
|
||||
c.fill = GridBagConstraints.BOTH;
|
||||
c.weightx = 1;
|
||||
|
||||
Reference in New Issue
Block a user