Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main;
- import java.awt.EventQueue;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.util.ArrayList;
- import java.util.LinkedList;
- import javax.swing.JFrame;
- import javax.swing.JOptionPane;
- import javax.swing.JScrollPane;
- import java.awt.BorderLayout;
- import java.awt.Component;
- import javax.swing.JPanel;
- import javax.swing.AbstractCellEditor;
- import javax.swing.JButton;
- import javax.swing.JTable;
- import javax.swing.ListSelectionModel;
- import javax.swing.SwingConstants;
- import javax.swing.table.AbstractTableModel;
- import javax.swing.table.DefaultTableCellRenderer;
- import javax.swing.table.TableCellEditor;
- import javax.swing.table.TableCellRenderer;
- import javax.swing.table.TableColumn;
- public class TableTest {
- private JFrame frame;
- private JTable table;
- private TableModel model;
- private int count = 0;
- public static void main(String[] args) {
- EventQueue.invokeLater(new Runnable() {
- public void run() {
- try {
- TableTest window = new TableTest();
- window.frame.setVisible(true);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- });
- }
- public TableTest() {
- initialize();
- }
- private void initialize() {
- frame = new JFrame();
- frame.setTitle("Example");
- frame.setBounds(100, 100, 450, 300);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- JScrollPane scrollPane = new JScrollPane();
- frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
- model = new TableModel();
- model.addRow(createRow());
- table = new JTable(model);
- table.setDefaultRenderer(String.class, new RowRender());
- // TableColumn col = table.getColumnModel().getColumn(0);
- // col.setCellEditor(new ButtonEditor());
- // col.setCellRenderer(new CellRenderer());
- table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- scrollPane.setViewportView(table);
- JPanel panel = new JPanel();
- frame.getContentPane().add(panel, BorderLayout.SOUTH);
- JButton btnClear = new JButton("CLEAR");
- btnClear.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent arg0) {
- getModel().clearHistory();
- }
- });
- JButton btnCreateRow = new JButton("CREATE BUTTON ROW");
- btnCreateRow.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- getModel().addRow(createRow());
- }
- });
- JButton btnCreareTextRow = new JButton("CREATE TEXT ROW");
- btnCreareTextRow.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent arg0) {
- getModel().addRow(createTextRow());
- }
- });
- panel.add(btnCreareTextRow);
- panel.add(btnCreateRow);
- panel.add(btnClear);
- }
- class TableModel extends AbstractTableModel {
- private String[] column = { "One", "Two" };
- private LinkedList<ArrayList<Object>> rows;
- private static final long serialVersionUID = 1L;
- TableModel() {
- this.rows = new LinkedList<>();
- }
- public String getColumnName(int columnIndex) {
- for (int i = 0; i < column.length; i++) {
- if (i == columnIndex) {
- return column[i];
- }
- }
- return "";
- }
- @Override
- public int getColumnCount() {
- return column.length;
- }
- @Override
- public int getRowCount() {
- return rows.size();
- }
- @Override
- public Object getValueAt(int rowIndex, int columnIndex) {
- return rows.get(rowIndex).get(columnIndex);
- }
- public Class<?> getColumnClass(int columnIndex) {
- return String.class;
- }
- void addRow(ArrayList<Object> row) {
- rows.addFirst(row);
- while (rows.size() >= 11) {
- rows.removeLast();
- }
- fireTableRowsInserted(0, getRowCount());
- }
- public boolean isCellEditable(int rowIndex, int columnIndex) {
- if (columnIndex == 0) {
- return true;
- }
- return false;
- }
- public void clearHistory() {
- rows.clear();
- fireTableDataChanged();
- }
- }
- public TableModel getModel() {
- return model;
- }
- public ArrayList<Object> createRow() {
- ArrayList<Object> row = new ArrayList<Object>();
- JButton button = new JButton(count + " Click me");
- button.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- JOptionPane.showMessageDialog(frame, "Pressed");
- }
- });
- row.add(button);
- row.add("Text");
- count++;
- return row;
- }
- public ArrayList<Object> createTextRow() {
- ArrayList<Object> row = new ArrayList<Object>();
- row.add("Text");
- row.add("Text");
- count++;
- return row;
- }
- class ButtonEditor extends AbstractCellEditor implements TableCellEditor {
- private static final long serialVersionUID = 1L;
- private JButton jButton;
- public ButtonEditor() {
- }
- public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row,
- int column) {
- jButton = (JButton) value;
- stopCellEditing();
- jButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- stopCellEditing();
- jButton.removeActionListener(this);
- }
- });
- return (JButton) value;
- }
- public Object getCellEditorValue() {
- return jButton;
- }
- public JButton getjButton() {
- return jButton;
- }
- public void setjButton(JButton jButton) {
- this.jButton = jButton;
- }
- }
- public class CellRenderer implements TableCellRenderer {
- public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
- int row, int column) {
- return (Component) value;
- }
- }
- public class RowRender extends DefaultTableCellRenderer {
- private static final long serialVersionUID = 1L;
- public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
- int row, int column) {
- Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
- setHorizontalAlignment(SwingConstants.CENTER);
- return cell;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement