package gui;
// テーブル設定
public class TaxtArea
extends JPanel{
public TaxtArea() {
super(
new BorderLayout());
String str0 =
"D未設定エリア未設定エリア未設定エリア未設定エリア未設定エリア";
String str1 =
"テキストエリアの動作確認";
String str2 =
"JTextArea JTextArea JTextArea JTextArea";
String str3 =
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
String[] columnNames = {
"Default",
"JTextArea",
"JTextArea notレンダラ"};
Object[][] data = {
{str0, str1, str2}, {str0, str1, str2},
{str3, str3, str3}, {str3, str3, str3}
};
DefaultTableModel model =
new DefaultTableModel(data, columnNames) {
@Override
public Class<?> getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};
JTable table =
new JTable(model);
table.setRowSelectionAllowed(true);
table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
table.setRowHeight(50);
JTableHeader tableHeader = table.getTableHeader();
tableHeader.setReorderingAllowed(false);
//2列目にテキストエリアレンダラセット
TableColumnModel mdl = table.getColumnModel();
TableColumn col = mdl.getColumn(1);
col.setCellRenderer(
new TextAreaCellRenderer());
add(
new JScrollPane(table));
setPreferredSize(
new Dimension(320, 240));
}
// メイン
public static void main(String[] args) {
EventQueue.invokeLater(
new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
// フレーム設定
public static void createAndShowGUI() {
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {
e.printStackTrace();
}
JFrame frame =
new JFrame(
"TITLE");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(
new TaxtArea());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
// テキストエリアレンダラ
// 文字の折り返しを設定する
class TextAreaCellRenderer extends JTextArea implements TableCellRenderer {
//public static class UIResource extends TextAreaCellRenderer implements javax.swing.plaf.UIResource {}
public TextAreaCellRenderer() {
super();
setLineWrap(true);
// 折り返しON
setBorder(BorderFactory.createEmptyBorder(0,5,0,5));
//setName("Table.cellRenderer");
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
if(isSelected) {
setForeground(table.getSelectionForeground());
setBackground(table.getSelectionBackground());
}else{
setForeground(table.getForeground());
setBackground(table.getBackground());
}
setFont(table.getFont());
setText((value ==
null) ?
"" : value.toString());
return this;
}
//Overridden for performance reasons. ---->
@Override
public boolean isOpaque() {
Color back = getBackground();
Component p = getParent();
if(p !=
null) {
p = p.getParent();
}
// p should now be the JTable.
boolean colorMatch = back !=
null && p !=
null && back.equals(p.getBackground()) && p.isOpaque();
return !colorMatch && super.isOpaque();
}
@Override protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
//String literal pool
//if(propertyName=="document" || ((propertyName == "font" || propertyName == "foreground") && oldValue != newValue)) {
if(
"document".equals(propertyName) || oldValue != newValue && (
"font".equals(propertyName) ||
"foreground".equals(propertyName))) {
super.firePropertyChange(propertyName, oldValue, newValue);
}
}
@Override
public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {}
@Override
public void repaint(long tm, int x, int y, int width, int height) {}
@Override
public void repaint(Rectangle r) {}
@Override
public void repaint() {}
@Override
public void invalidate() {}
@Override
public void validate() {}
@Override
public void revalidate() {}
//<---- Overridden for performance reasons.
}