ScAlAn A. Alex!!! - Как в таблице разукрасить ячейки

Главная страница/Статьи/Как в таблице разукрасить ячейки
*Pong-1
>Color cells
*Rus2Translit
*Ctrl+C
*О смерти...
*JavaME HelloWorld...
*Советы...

Напишите мне письмо

Как в таблице разукрасить ячейки

Последняя редакция 17 февраля 2005 года.

Введение.

Доброго времени!!!
Эта маленькая статья и набор скриншотов покажет Вам, как сделать отображение различными цветами ячейки в таблице. Предполагается, что у Вас установлен и настроен JDK и рабочая среда NetBeans v4.0.

Создание нового проекта

- Запустите среду разработки NetBeans, создайте проект - GUI приложение;
- Поместите на форму таблицу и кнопку.
Таблица - та, в которой мы будем разукрашивать ячейки, а кнопка - по которой это все произойдет.

Исходные тексты решения этой проблемы

Исходный текст примера:
/*
 * Main.java
 *
 * Created on 16 02 2005., 13:18
 */

package tabletest;

import java.awt.Color;
import javax.swing.table.*;

/**
 *
 * @author  scalan
 */
public class Main extends java.awt.Frame {

    /** Creates new form Main */
    public Main() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private void initComponents() {//GEN-BEGIN:initComponents
        jTable1 = new javax.swing.JTable();
        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {"1", "5", "6", "4"},
                {"2", "4", "7", "6"},
                {"3", "4", "8", "7"},
                {"0", "9", "7", "3"}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        add(jTable1, java.awt.BorderLayout.CENTER);

        jLabel1.setText("jLabel1");
        add(jLabel1, java.awt.BorderLayout.NORTH);

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        add(jButton1, java.awt.BorderLayout.EAST);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-400)/2, (screenSize.height-300)/2, 400, 300);
    }//GEN-END:initComponents

        final String[] names = {
          "z1",
          "z2",
          "z3"
        };

    class NamedColor extends Color {
        String name;
        public NamedColor(Color color, String name) {
            super(color.getRGB());
            this.name = name;
        }

        public Color getTextColor() {
            int r = getRed();
            int g = getGreen();
            int b = getBlue();
            if(r > 240 || g > 240) {
                return Color.black;
            } else {
                return Color.white;
            }
        }

        public String toString() {
            return name;
        }
    }

        NamedColor aqua        = new NamedColor(new Color(127, 255, 212), "Aqua");
        NamedColor black       = new NamedColor(Color.black, "Black");
        NamedColor blue        = new NamedColor(new Color(0, 0, 222), "Blue");

    Object data[][] = {
        {"qqqqqqqqqq",        aqua,  "wwwwwwwwwwwww"},
        {"qqqqqqqqqq",        black, "wwwwwwwwwwwww"},
        {"qqqqqqqqqq",        blue,  "wwwwwwwwwwwww"},
        {"qqqqqq3333333qqqq", blue,  "wwwwwww33wwwwww"},
        {"qqdsdsqqqqqqqq",    black, "wsdswwwwwwwwwwww"}
    };

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        // TODO add your handling code here:
        // Create a model of the data.
        TableModel dataModel = new AbstractTableModel() {
            public int getColumnCount() { return names.length; }
            public int getRowCount() { return data.length;}
            public Object getValueAt(int row, int col) {return data[row][col];}
            public String getColumnName(int column) {return names[column];}
            public Class getColumnClass(int c) {return getValueAt(0, c).getClass();}
            public boolean isCellEditable(int row, int col) {return col != 1;}
            public void setValueAt(Object aValue, int row, int column) { data[row][column] = aValue; }
         };

        // Show colors by rendering them in their own color.
        DefaultTableCellRenderer colorRenderer = new DefaultTableCellRenderer() {
            public void setValue(Object value) {
                if (value instanceof NamedColor) {
                    NamedColor c = (NamedColor) value;
                    setBackground(c);
                    setForeground(c.getTextColor());
                    setText(c.toString());
                } else {
                    super.setValue(value);
                }
            }
        };

        jTable1.setModel(dataModel);
        TableColumn colorColumn = jTable1.getColumn(names[1]);
        colorColumn.setCellRenderer(colorRenderer);

    }//GEN-LAST:event_jButton1ActionPerformed

    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
        System.exit(0);
    }//GEN-LAST:event_exitForm

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Main().setVisible(true);
            }
        });
    }


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JTable jTable1;
    // End of variables declaration//GEN-END:variables
}
- Структура созданного проекта:
Скриншот окна...

Компиляция проекта

После удачного создания проекта наша цель - посмотреть его работу. Но перед этим необходимо скомпилировать проект. Т.е. получить файлы, которые можно загрузить в эмулятор и выполнить, а также в реальный телефон и тоже выполнить... - Для компиляции проекта необходимо в разделе проектов на имени созданного проекта нажать кнопку мыши, вызывающую контекстное меню, и выбрать пункт Build Project: - Компиляция проекта завершена.

Выполнение проекта

После успешной компиляции проекта попробуем его выполнить. Используя среду разработки NetBeans это сделать очень просто. - Для выполнения проекта необходимо в разделе проектов на имени выполняемого проекта нажать кнопку мыши, вызывающую контекстное меню, и выбрать пункт Run Project:
Скриншот команды...
- На экране будет загружено окно с исходной таблицей.
- Нажимаем на кнопку и, о чудо, таблица стала совсем другой.
Скриншот команды...

Заключение

Поздравляю!!! Мы с Вами таки это сделали.... Посмотрите внимательно код примера и убедитесь, что в этом нет ничего сложного...
Заархивированные файлы проета для скачивания расположены здесь. (zip ~ 17 kb).
Ваши мнения и пожелания, а также любую конструктивную критику буду рад получить по электронной почте.
Hosted by uCoz