然后用JTable的getColumn(Object)获取列,再用setCellRenderer(TableCellRenderer cellRenderer)方法就可以添加进表格了。
附相关API:
javax.swing.JTable
public TableColumngetColumn(Object identifier)返回表中列的 TableColumn 对象,当使用 equals 进行比较时,表的标识符等于
identifier。
参数:identifier - 标识符对象
返回:与标识符相匹配的 TableColumn 对象
javax.swing.table.TableCellRenderer
public interface TableCellRenderer
此接口定义了要成为 JTable 中单元格渲染器的任意对象所需的方法。
getTableCellRendererComponentComponentgetTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column)返回用于绘制单元格的组件。此方法用于在绘制前适当地配置渲染器。
TableCellRenderer 还负责呈现表示该表当前 DnD 放置位置的单元格(如果有)。如果此呈现器负责呈现 DnD 放置位置,则它应该直接查询表以确定给定的行和列是否表示放置位置:
JTable.DropLocation dropLocation = table.getDropLocation()
if (dropLocation != null
&&!dropLocation.isInsertRow()
&&!dropLocation.isInsertColumn()
&&dropLocation.getRow() == row
&&dropLocation.getColumn() == column) {
// this cell represents the current drop location
// so render it specially, perhaps with a different color
}
在打印 *** 作期间,将调用此方法(isSelected 和 hasFocus 为
false)阻止选择和焦点在打印输出中出现。要根据是否打印表进行其他定制,检查 JComponent.isPaintingForPrint()
的返回值。
参数:table - 要求渲染器绘制的 JTable;可以为 nullvalue - 要呈现的单元格的值。由具体的渲染器解释和绘制该值。例如,如果 value 是字符串
"true",则它可呈现为字符串,或者也可呈现为已选中的复选框。null 是有效值
isSelected - 如果使用选中样式的高亮显示来呈现该单元格,则为 true;否则为 false
hasFocus - 如果为
true,则适当地呈现单元格。例如,在单元格上放入特殊的边框,如果可以编辑该单元格,则以彩色呈现它,用于指示正在进行编辑
row - 要绘制的单元格的行索引。绘制头时,row 值是 -1
column - 要绘制的单元格的列索引
javax.swing.table.TableColumn
public void setCellRenderer(TableCellRenderer cellRenderer)设置 JTable 用于绘制此列各值的 TableCellRenderer。
参数:cellRenderer - 新的 cellRenderer
实现方法1、初始化
首先添加JScrollPane的实例jScrollPane1,DefaultListModel
实例model1,然后使用model1生成JList的实例。在对话框合适的位置添加jScrollPane1,调整到合适的大小,然后在jScrollPane1上增加jList1.这样带有滚动条的列表框就添加完成了。
初始化一个Vector实例用来存储选择的列表元素。由于选择的元素具有不确定性,所以使用Vector这种存储空间可以动态变化的数据结构。Vector初始化实例时不能指定初始化长度,所以增加一个整形变量指示Vector中列表中对象的个数。
2、添加和删除列表元素
列表框中的元素添加和删除是通过model1的addElement方法和removeElement方法实现的。通过列表框的属性selectionMode可以设置列表框单选,单个间断选择和多个间断选择。Vector中存储的对象是和选择的元素相对应的,对象的添加和删除是通过addElement方法和removeElement方法实现的。
3、获得选择元素
在点击“确定”按钮以后,需要将Vector实例中的对象转化成为需要的数据类型。
实例解析
现以图1所示为例对具体实现方法进行描述。由图1中左面列表框中选择可用元素,选择方式设为多个间断选择,由于其他两种方式相对简单,实现方法可在这个实例的基础上修改得到。选定元素之后,点击“>>”按钮,选择的元素就会在右面的列表框显示出来。如果多选或者错选,可在右面的列表框中选定元素后点击“<<”按钮移去选定的元素。
以上实现的功能代码如下
图1 列表框示例
具体程序实现方法如下。
import javax.swing.JPanel
import javax.swing.JFrame
import javax.swing.JScrollPane
import java.awt.Rectangle
import java.util.Vector
import javax.swing.JList
import javax.swing.JButton
import javax.swing.DefaultListModel
public class Llist extends JFrame {
private static final long serialVersionUID = 1L
private JPanel jContentPane = null
private JScrollPane jScrollPane = null
private JScrollPane jScrollPane1 = null
private JList jList = null
private JList jList1 = null
private JButton jButton = null
private JButton jButton1 = null
private DefaultListModel model
private DefaultListModel model2
/**
* This is the default constructor
*/
private Vector vc=new Vector() // @jve:decl-index=0:
private int num
public Llist() {
super()
initialize()
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(393, 263)
this.setContentPane(getJContentPane())
this.setTitle("JFrame")
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel()
jContentPane.setLayout(null)
jContentPane.add(getJScrollPane(), null)
jContentPane.add(getJScrollPane1(), null)
jContentPane.add(getJButton(), null)
jContentPane.add(getJButton1(), null)
jContentPane.add(getJButton2(), null)
jContentPane.add(getJButton3(), null)
}
return jContentPane
}
/**
* This method initializes jScrollPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane()
jScrollPane.setBounds(new Rectangle(22, 23, 110, 152))
jScrollPane.setViewportView(getJList())
}
return jScrollPane
}
/**
* This method initializes jScrollPane1
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane1() {
if (jScrollPane1 == null) {
jScrollPane1 = new JScrollPane()
jScrollPane1.setBounds(new Rectangle(223, 24, 116, 150))
jScrollPane1.setViewportView(getJList1())
}
return jScrollPane1
}
/**
* This method initializes jList
*
* @return javax.swing.JList
*/
String[]
a={"Element1","Element2","Element3","Element4","Element5","Element6","Element7","Element8","Element9","Element10",}
private JButton jButton2 = null
private JButton jButton3 = null
private JList getJList() {
if (jList == null) {
jList = new JList()
model=new DefaultListModel()
jList.setModel(model)
for(int i=0i<a.lengthi++)
{
model.addElement(a[i])
}
}
return jList
}
/**
* This method initializes jList1
*
* @return javax.swing.JList
*/
private JList getJList1() {
if (jList1 == null) {
jList1 = new JList()
model2=new DefaultListModel()
jList1.setModel(model2)
}
return jList1
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton()
jButton.setBounds(new Rectangle(149, 52, 56, 29))
jButton.setText(">>")
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
//System.out.println("actionPerformed()")// TODO Auto-generated Event
stub actionPerformed()
Object[] items=jList.getSelectedValues()
for(int i=0i<items.lengthi++)//从左边选中元素,往右边的列表中添加元素
{
model2.addElement(items[i])
num=num+1
vc.setSize(num)
}
}
})
}
return jButton
}
/**
* This method initializes jButton1
*
* @return javax.swing.JButton
*/
private JButton getJButton1() {
if (jButton1 == null) {
jButton1 = new JButton()
jButton1.setBounds(new Rectangle(145, 117, 65, 31))
jButton1.setText("<<")
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
//System.out.println("actionPerformed()")// TODO Auto-generated Event
stub actionPerformed()
for(int i=0i<jList1.getSelectedValues().lengthi++)
{
model2.removeElement(jList1.getSelectedValue())//删除选中右边的列表元素
num=num-1
vc.setSize(num)
}
}
})
}
return jButton1
}
/**
* This method initializes jButton2
*
* @return javax.swing.JButton
*/
private JButton getJButton2() {
if (jButton2 == null) {
jButton2 = new JButton()
jButton2.setBounds(new Rectangle(82, 193, 63, 27))
jButton2.setText("确定")
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
}
})
}
return jButton2
}
/**
* This method initializes jButton3
*
* @return javax.swing.JButton
*/
private JButton getJButton3() {
if (jButton3 == null) {
jButton3 = new JButton()
jButton3.setBounds(new Rectangle(196, 195, 66, 23))
jButton3.setText("取消")
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
//System.out.println("actionPerformed()")// TODO Auto-generated Event
stub actionPerformed()
model2.removeAllElements()//删除右边列表框的所有元素
}
})
}
return jButton3
}
}
你就这态度???((偷笑),不想站在巨人的肩膀上了吗,人活一世,装X二字)import javax.swing.JButton
import javax.swing.JFrame
public class c {
public static void main(String[] args) {
// 你懂的
JFrame jf = new JFrame()
// 你懂的
jf.setSize(300, 400)
// JFrame做为一个画板,他里面可以有控件,有控件就有控件布局的样式,样式为null可以理解为自由布局
jf.setLayout(null)
// JFrame的setVisible的默认值为false,值的意义是是否显示.
jf.setVisible(true)
// 按钮
JButton jb = new JButton("按钮")
// 添加按钮
jf.add(jb)
// 因为上面的布局样式,他设置了x50y80坐标和长100宽30
jb.setBounds(50, 80, 100, 30)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)