
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的问题,高手指教!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)