每一行都要JLabe, JTextField和JButton共3个元素,每一行有3套聚焦点。
等于要手工实现JList的JList—二维的JList
Java对这种情况预置了JTable。省去了重复发明轮子的过程
学和用JTable把。
简写的代码可以实现一行三个,但没有实现聚焦系统。不实用。还是直接用JTable
import java.awt.Component;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.ListCellRenderer;
public class Test{
static public class Row extends JPanel {
private static final long serialVersionUID = 1234L;
public JLabel label;
public JButton button;
public JTextField field;
public Row(){
super();
label=new JLabel(); button=new JButton(); field=new JTextField();
add(label); add(field); add(button);
}
}
public static void main(String[] args) {
JFrame f=new JFrame("示例");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(640, 480);
Vector<Row> rows=new Vector<Row>();
for(int i=0;i<20;i++){
Row r=new Row();
r.button.setText("按钮"+i);
r.field.setText("文本框"+i);
r.label.setText("标签"+i);
rows.add(r);
}
JList<Row> l=new JList<Row>(rows);
l.setCellRenderer(new ListCellRenderer<Row>(){
@Override
public Component getListCellRendererComponent(
JList<? extends Row> list, Row value, int index,
boolean isSelected, boolean cellHasFocus) {
return value;
}
});
f.add(l);
f.setVisible(true);
}
}
...有一个JLabe, JTextField和JButton. 附有注释的用例
public JButton button;public JTextField field;public Row(){ super();label=new JLabel(); button=new JButton(); field=new JTextField();add(label); add(field); add(button);} } public static void main(String[] args) { JFrame f=new JFrame("示例");f.setDefaultCloseOperation(...