
给你一个复选框的例子吧,一样很好用的。
不多说了,直接上代码:
import java.awt.BorderLayout
import java.awt.Dimension
import java.awt.FlowLayout
import java.awt.Toolkit
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JPanel
import javax.swing.JScrollPane
import javax.swing.JTable
import javax.swing.table.DefaultTableModel
import javax.swing.table.TableColumn
public class CheckedBoxTabel extends JFrame {
private JTable table
private JScrollPane sPane
private DefaultTableModel model
private JButton button, button2
private JPanel pane
public CheckedBoxTabel() {
// TODO Auto-generated constructor stub
//窗口设置,不用管
this.setSize(400, 400)
Toolkit toolkit = Toolkit.getDefaultToolkit()
Dimension scrnsize
scrnsize = toolkit.getScreenSize()
setLocation(scrnsize.width / 2 - getWidth() / 2, scrnsize.height / 2
- getHeight() / 2)
this.setDefaultCloseOperation(EXIT_ON_CLOSE)
//table的model设置
model = new DefaultTableModel(new Object[][] {}, new String[] { "论文ID",
"论文标题", "是否提交", "论文负责人" })
//table加载model
table = new JTable(model)
//将第三列的显示设为checkbox类型,楼主想设置哪列自己决定
//但是记得该列的值是Boolean型的
TableColumn tc = table.getColumnModel().getColumn(2)
tc.setCellEditor(table.getDefaultEditor(Boolean.class))
tc.setCellRenderer(table.getDefaultRenderer(Boolean.class))
sPane = new JScrollPane()
sPane.setViewportView(table)
//添加增添一行按钮的事件处理
button = new JButton("加一行")
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
model = (DefaultTableModel) table.getModel()
Object[] data = new Object[4]
data[0] = "1"
data[1] = "论文"
data[2] = new Boolean(false)
data[3] = "张三"
model.addRow(data)
/*
//或者也可以用
model.addRow(new Object[]{"1","论文",new Boolean(false),"张三"})
*/
table.setModel(model)
}
})
//添加显示所选行的按钮的事件处理
button2 = new JButton("显示所选行")
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
model = (DefaultTableModel) table.getModel()
int count = model.getRowCount()
for (int i = 0i <counti++) {
if (model.getValueAt(i, 2).equals(true)){
//在这里添加你要处理行的方法
System.out.println("第" + (i + 1) + "行被选中")
}
}
}
})
pane = new JPanel()
pane.setLayout(new FlowLayout())
pane.add(button)
pane.add(button2)
this.add(sPane, BorderLayout.CENTER)
this.add(pane, BorderLayout.SOUTH)
}
public static void main(String[] args) {
new CheckedBoxTabel().setVisible(true)
}
}
我设计的测试结果是在控制台输出的,楼主可以自己修改:
第4行被选中
第7行被选中
第8行被选中
第10行被选中
我在用轻量级的javax.swing.JPanel和javax.swing.JButton试过,可以通过在actionPerformed里调用jPanel.add(new JButton("XXX"))来增加一个按钮.
//注jPanel是JPanel的一个实例.
但点击的时候,按钮实际上是建立了,但却没有显示出来.这时如果你改变一下你的窗口大小的话,你会发现,这个按钮已经建立了.这就需要在add之后,让窗口重绘了.
理论上再调用repaint()可以重绘,但我试过之后发现还是没有直接把这个按钮显示出来
我们知道,画布的大小被改变的时候,肯定是会重绘的,所以可以我试了一个很笨的方法,用setSize(0,0)之后,再setSize(yourX,yourY)当然,你如果是自然调整大小的,后面加一个pack()就OK了.这样会看到类似于网页刷新似的一闪,就会多出一个按钮来了.
当然我觉得应该有更好的办法可以来通知系统重绘窗口.
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)