关于Java Swing 中JTable的问题,高手指教!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Java Swing 中JTable的问题,高手指教!相关的知识,希望对你有一定的参考价值。

如图,我想制作这样的JTable,其中的第四列中包含两个带有鼠标监听的JLable,该怎么实现。
或者有更好的其他方法实现我这个画面也可以。谢过先!!
我问的桌面应用程序的编写,回答web相关的谢过了先,但是不是我需要的。

//你的布局太紧凑了,看着眼疼,试试这个清爽的吧,选中操作行进行操作
package com.hxf.more;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
//维护表格
public class JTableDefaultTableModelTest extends JFrame
private DefaultTableModel tableModel; //表格模型对象
private JTable table;
private JTextField aTextField;
private JTextField bTextField;
public JTableDefaultTableModelTest()

super();
setTitle("表格");
setBounds(100,100,500,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
String[] columnNames = "A","B"; //列名
String [][]tableVales="A1","B1","A2","B2","A3","B3","A4","B4","A5","B5"; //数据
tableModel = new DefaultTableModel(tableVales,columnNames);
table = new JTable(tableModel);
JScrollPane scrollPane = new JScrollPane(table); //支持滚动
getContentPane().add(scrollPane,BorderLayout.CENTER);
//jdk1.6
//排序:
//table.setRowSorter(new TableRowSorter(tableModel));
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //单选
table.addMouseListener(new MouseAdapter() //鼠标事件
public void mouseClicked(MouseEvent e)
int selectedRow = table.getSelectedRow(); //获得选中行索引
Object oa = tableModel.getValueAt(selectedRow, 0);
Object ob = tableModel.getValueAt(selectedRow, 1);
aTextField.setText(oa.toString()); //给文本框赋值
bTextField.setText(ob.toString());

);
scrollPane.setViewportView(table);
final JPanel panel = new JPanel();
getContentPane().add(panel,BorderLayout.SOUTH);
panel.add(new JLabel("A: "));
aTextField = new JTextField("A4",10);
panel.add(aTextField);
panel.add(new JLabel("B: "));
bTextField = new JTextField("B4",10);
panel.add(bTextField);
final JButton addButton = new JButton("添加"); //添加按钮
addButton.addActionListener(new ActionListener()//添加事件
public void actionPerformed(ActionEvent e)
String []rowValues = aTextField.getText(),bTextField.getText();
tableModel.addRow(rowValues); //添加一行
int rowCount = table.getRowCount() +1; //行数加上1
aTextField.setText("A"+rowCount);
bTextField.setText("B"+rowCount);

);
panel.add(addButton);
final JButton updateButton = new JButton("修改"); //修改按钮
updateButton.addActionListener(new ActionListener()//添加事件
public void actionPerformed(ActionEvent e)
int selectedRow = table.getSelectedRow();//获得选中行的索引
if(selectedRow!= -1) //是否存在选中行

//修改指定的值:
tableModel.setValueAt(aTextField.getText(), selectedRow, 0);
tableModel.setValueAt(bTextField.getText(), selectedRow, 1);
//table.setValueAt(arg0, arg1, arg2)


);
panel.add(updateButton);
final JButton delButton = new JButton("删除");
delButton.addActionListener(new ActionListener()//添加事件
public void actionPerformed(ActionEvent e)
int selectedRow = table.getSelectedRow();//获得选中行的索引
if(selectedRow!=-1) //存在选中行

tableModel.removeRow(selectedRow); //删除行


);
panel.add(delButton);

/**
* @param args
*/
public static void main(String[] args)
// TODO Auto-generated method stub
JTableDefaultTableModelTest jTableDefaultTableModelTest = new JTableDefaultTableModelTest();
jTableDefaultTableModelTest.setVisible(true);

参考技术A JLabel label = new JLabel("<html><a href='#'>删除</a></html>");
label.addMouseListener(new MouseAdapter() // 使用匿名类
public void addMousePressed(MouseEvent e) //鼠标点击事件
int selectedRow = table.getSelectedRow(); //获得选中行的索引
if(selectedRow!=-1) // 未选中时返回-1

tableModel.removeRow(selectedRow); //删除行


);本回答被提问者和网友采纳
参考技术B 用java代码不是更好能实现 吗?在jsp页面画一个,做个事件监听就行了。

Java Swing Jtable 单元格不可编辑

使用Jtable时候,我建议自定义一个Jtable,这样的好处很多
比如,table的很多样式需要你自己定义,行高,隔行变色等等,如果你单独的去创建一个原生的Jtable
则需要每个都去设置。

还有另外一个原因,UIManager由于平台的相异,不能全局设置Jtable 。

—–在你自定义的表格中重写以下方法就可以实现不可编辑了—-

@override
public boolean isCellEditable(int row, int column) {
     return false;
}

 

以上是关于关于Java Swing 中JTable的问题,高手指教!的主要内容,如果未能解决你的问题,请参考以下文章

java swing JTable显示问题

Java Swing Jtable 单元格不可编辑

在 JAVA swing 中将数据库记录显示到 JTable

java swing控件JTable 怎么单独设置某一行的颜色

如何使 JTable 中的列对 Swing Java 不可见

java中JTable表格实现添加图片的渲染