Введение.
Доброго времени!!!
Эта маленькая статья и набор скриншотов покажет Вам, как сделать
отображение различными цветами ячейки в таблице. Предполагается,
что у Вас установлен и настроен 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).
|