效果图
参考代码
import java.awt.*import java.awt.event.*
import javax.swing.*
//本类继承自JFrame 实现了 ActionListener接口
public class DemoFrame1 extends JFrame implements ActionListener {
JPanel jpc //存放组件的面板
JScrollPane jsp//滚动面板
JButton jbAdd ,jbRemove,jbReset// 增加,删除按钮
int index = 1//开始的字符
//构造函数
public DemoFrame1() {
jpc = new JPanel()
jpc.setLayout(new BoxLayout(jpc, BoxLayout.Y_AXIS))//盒子布局.从上到下
jsp = new JScrollPane(jpc,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER)
add(jsp)
jbAdd = new JButton("增加")
jbAdd.addActionListener(this)
jbRemove = new JButton("删除")
jbRemove.addActionListener(this)
jbReset = new JButton("重置")
jbReset.addActionListener(this)
JPanel jps = new JPanel()
jps.add(jbAdd)
jps.add(jbRemove)
jps.add(jbReset)
add(jps,BorderLayout.SOUTH)
setTitle("增删组件")
setDefaultCloseOperation(EXIT_ON_CLOSE)
setSize(300, 220)//大小
setLocationRelativeTo(null)//居中
}
//main函数
public static void main(String[] args) {
new DemoFrame1().setVisible(true)//初始化并可见
}
@Override
public void actionPerformed(ActionEvent e) {
JButton jb = (JButton) e.getSource()
if(jb==jbAdd) {//当点击添加按钮时
jpc.add(new MyJPanel(index))//添加1个自己定义的面板组件
index++//自加1
myUpdateUI()//刷新界面
}else if(jb ==jbRemove) {//当点击删除按钮时
if(jpc.getComponentCount()>0) { // 得到jpc里的MyJPanel的组件数量
jpc.remove(jpc.getComponentCount()-1)//删除末尾的一个组件 ,
index-=1
myUpdateUI()
}
}else if(jb==jbReset) {
for (int i = 0 i < jpc.getComponentCount() i++) {
MyJPanel mjp = (MyJPanel) jpc.getComponent(i)
//也就是说取值,可以根据文本框所在的位置来取
System.out.println("第"+(i+1)+"个文本框的值是"+mjp.getJTFValue())
mjp.setJTFValue("")//清空,重置
System.out.println("第"+(i+1)+"个文本框的值已清空重置")
}
}
}
//刷新界面函数
private void myUpdateUI() {
SwingUtilities.updateComponentTreeUI(this)//添加或删除组件后,更新窗口
JScrollBar jsb = jsp.getVerticalScrollBar()//得到垂直滚动条
jsb.setValue(jsb.getMaximum())//把滚动条位置设置到最下面
}
}
//自定义一个JPanle类
class MyJPanel extends JPanel{
public JTextField jtf
public MyJPanel(int index) {
JLabel jl = new JLabel("字符"+index)
jtf = new JTextField(15)
add(jl)
add(jtf)
}
//获取文本框的值
public String getJTFValue() {
return jtf.getText()
}
//设置文本框的值
public void setJTFValue(String value) {
jtf.setText(value)
}
}
就是JTable中,加入JButton对吧。那个简单。写一个类继承与JButton并实现javax.swing.table.TableCellRenderer接口就行了。然后用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
class ChildWindos extends JFrame{JButton b1
public ChildWindos(){
super("字体")
this.setResizable(false)
this.setVisible(true)
this.setSize(300,300)
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
this.setLayout(null)
b1=new JButton("JBT1")
b1.setSize(100,100)
b1.setLocation(100,100)
this.add(b1)
}
}
你的父窗体怎么加的按钮,子窗体就怎么加,跟那无区别
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)