如何使用 Swing 组件 JTable

如何使用 Swing 组件 JTable,第1张

private static void initFrame ( TableFrame tc ) { tcsetSize (512, 300); tcsetResizable (false); tcsetLocationRelativeTo (null); tcsetDefaultCloseOperation (JFrameEXIT_ON_CLOSE); tcsetVisible (true); } public static void main ( String[] args ) { TableFrame tc = new TableFrame ("TableFrame"); tccreateTable (); initFrame (tc); }

如果是这样的话,我有一个建议。不要自动拉长表格列宽。

而是将单元格换成LABEL表示。

这样你就可以用tooltip属性。表格里是用来代替,鼠标放上去会有悬浮显示全部。

//你的布局太紧凑了,看着眼疼,试试这个清爽的吧,选中 *** 作行进行 *** 作

package comhxfmore;

import javaawtBorderLayout;

import javaawteventActionEvent;

import javaawteventActionListener;

import javaawteventMouseAdapter;

import javaawteventMouseEvent;

import javaxswingJButton;

import javaxswingJFrame;

import javaxswingJLabel;

import javaxswingJPanel;

import javaxswingJScrollPane;

import javaxswingJTable;

import javaxswingJTextField;

import javaxswingListSelectionModel;

import javaxswingtableDefaultTableModel;

//维护表格

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(JFrameEXIT_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,BorderLayoutCENTER);

//jdk16

//排序:

//tablesetRowSorter(new TableRowSorter(tableModel));

tablesetSelectionMode(ListSelectionModelSINGLE_SELECTION); //单选

tableaddMouseListener(new MouseAdapter(){ //鼠标事件

public void mouseClicked(MouseEvent e){

int selectedRow = tablegetSelectedRow(); //获得选中行索引

Object oa = tableModelgetValueAt(selectedRow, 0);

Object ob = tableModelgetValueAt(selectedRow, 1);

aTextFieldsetText(oatoString()); //给文本框赋值

bTextFieldsetText(obtoString());

}

});

scrollPanesetViewportView(table);

final JPanel panel = new JPanel();

getContentPane()add(panel,BorderLayoutSOUTH);

paneladd(new JLabel("A: "));

aTextField = new JTextField("A4",10);

paneladd(aTextField);

paneladd(new JLabel("B: "));

bTextField = new JTextField("B4",10);

paneladd(bTextField);

final JButton addButton = new JButton("添加"); //添加按钮

addButtonaddActionListener(new ActionListener(){//添加事件

public void actionPerformed(ActionEvent e){

String []rowValues = {aTextFieldgetText(),bTextFieldgetText()};

tableModeladdRow(rowValues); //添加一行

int rowCount = tablegetRowCount() +1; //行数加上1

aTextFieldsetText("A"+rowCount);

bTextFieldsetText("B"+rowCount);

}

});

paneladd(addButton);

final JButton updateButton = new JButton("修改"); //修改按钮

updateButtonaddActionListener(new ActionListener(){//添加事件

public void actionPerformed(ActionEvent e){

int selectedRow = tablegetSelectedRow();//获得选中行的索引

if(selectedRow!= -1) //是否存在选中行

{

//修改指定的值:

tableModelsetValueAt(aTextFieldgetText(), selectedRow, 0);

tableModelsetValueAt(bTextFieldgetText(), selectedRow, 1);

//tablesetValueAt(arg0, arg1, arg2)

}

}

});

paneladd(updateButton);

final JButton delButton = new JButton("删除");

delButtonaddActionListener(new ActionListener(){//添加事件

public void actionPerformed(ActionEvent e){

int selectedRow = tablegetSelectedRow();//获得选中行的索引

if(selectedRow!=-1) //存在选中行

{

tableModelremoveRow(selectedRow); //删除行

}

}

});

paneladd(delButton);

}

/

@param args

/

public static void main(String[] args) {

// TODO Auto-generated method stub

JTableDefaultTableModelTest jTableDefaultTableModelTest = new JTableDefaultTableModelTest();

jTableDefaultTableModelTestsetVisible(true);

}

}

问题有点意思。

JFrame中没有默认安装JTable,要有的话肯定是主动加上去的,要是你自己加上去的,再获取还是个问题吗,要是不知道谁加上去的,不知道是怎么加上去的,就不太好办了,但是也有办法,

可以getComponents()获取JFrame上的所有组件,对每个组件再getComponents。。。判断组件数组里的组件是不是JTable,形如:for(Component c: xxgetComponents()){

if(c instanceof JTable){

// do something

}

} 或者使用反射,JTable可能是作为JFrame的属性来使用了

这是在没有源码,又不能反编译的恶劣情况下的无奈之举,你遇到的情况有那么差吗?

// 设置表格不可编辑

DefaultTableModel tablemodel = new DefaultTableModel(

thisdata, thishead) {

// 设置表格不可编辑

public boolean isCellEditable(int row,

int column) {

return false;

}

};

jTable1 = new JTable(tablemodel);

数据库的jdbc *** 作会吧,会我就不说了。你问题的关键是不知道怎么得到JTable中是数据吧,在你的保存铵钮的点击事件中,添加:int row=tablegetSelectedRow();//得到你选中的行。//JTable里面的数据是保存在数组里的吧,假设这个数组为bodyString username = body[row][1];String password = body[row][2];//再通过jdbc插入到数据库,保存

具体的编写太麻烦了,而且我也没有编译工具,所以没法弄。

我说方法

第一次单击是选择一行数据,这里我们可以得到被选择数据的行,那么就能拿到它里面的值。

第二次单击可以d出jTable2表,将第一次得到的数据传给jTable2即可。

只是这个方法只能传一行值

以上就是关于如何使用 Swing 组件 JTable全部的内容,包括:如何使用 Swing 组件 JTable、java swing JTable显示问题、关于Java Swing 中JTable的问题,高手指教!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9740075.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存