package com.tanakahda.apps.swing.jlist.customcell.a005;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;
public class JListSample extends JFrame{
public static void main(String[] args){
JListSample test = new JListSample("JListSample");
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setBounds(10, 10, 640, 480);
test.setVisible(true);
}
JListSample(String title){
setTitle(title);
String[] initData = {"1", "2", "3", "4", "5", "6", "7", "8", "9"};
JList<String> list = new JList<String>(initData);
MyCellRenderer renderer = new MyCellRenderer();
list.setCellRenderer(renderer);
JScrollPane sp = new JScrollPane();
sp.getViewport().setView(list);
sp.setPreferredSize(new Dimension(640, 480));
JPanel p = new JPanel();
p.add(sp);
getContentPane().add(p, BorderLayout.CENTER);
}
GridBagLayoutの独自セルを返します.
@author
class MyCellRenderer extends JPanel implements ListCellRenderer<Object> {
private GridBagLayout gblayout;
public MyCellRenderer() {
gblayout = new GridBagLayout();
}
@Override
public Component getListCellRendererComponent(
JList<?> list, Object value, int index, boolean isSelected,
boolean cellHasFocus) {
JPanel p = new JPanel();
p.setLayout(gblayout);
JLabel l1 = new JLabel("label1", SwingConstants.CENTER);
JLabel l2 = new JLabel("label2", SwingConstants.CENTER);
JLabel l3 = new JLabel("label3", SwingConstants.CENTER);
JLabel l4 = new JLabel("label4", SwingConstants.CENTER);
l1.setBorder(new LineBorder(Color.BLACK, 2));
l2.setBorder(new LineBorder(Color.BLACK, 2));
l3.setBorder(new LineBorder(Color.BLACK, 2));
l4.setBorder(new LineBorder(Color.BLACK, 2));
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.gridheight = 2;
gbc.insets = new Insets(1, 1, 1, 1);
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gblayout.setConstraints(l1, gbc);
p.add(l1);
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 1;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.insets = new Insets(1, 1, 1, 1);
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gblayout.setConstraints(l2, gbc);
p.add(l2);
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 1;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.insets = new Insets(1, 1, 1, 1);
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gblayout.setConstraints(l3, gbc);
p.add(l3);
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridwidth = 2;
gbc.gridheight = 1;
gbc.insets = new Insets(1, 1, 1, 1);
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gblayout.setConstraints(l4, gbc);
p.add(l4);
if (isSelected) {
p.setBackground(Color.gray);
p.setForeground(Color.white);
} else {
p.setBackground(Color.white);
p.setForeground(Color.black);
}
return p;
}
}
}