JFrame布局学习 Java项目中一般会经常使用swing来开发一些C/S架构的软件吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你的表格想要实现删除、插入、修改等功能,建议维护表格模型,而不是直接JTable table=new JTable(data,columnNames);来建立。给你一个像MS Excel中实现固定列表格的例子:package com.han;import java.awt.BorderLayout;import java.util.Vector;import javax.swing.JFrame;/** * Provide a fixed column in a table. * * <code><p>public boolean isCellEditable(int row, int column) {<p> return getModel().isCellEditable(convertRowIndexToModel(row),<p> convertColumnIndexToModel(column));<p> }<p> </code> so we can also directly rewrite the isCellEditable() in the table * model. * * @author Gaowen * */public class JTable4_Modified extends JFrame { private static final long serialVersionUID = 805308369080023303L; public JTable4_Modified() { super(); setTitle("提供行标题栏的表格"); setBounds(100, 100, 500, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Vector<String> columnNameV = new Vector<>(); columnNameV.add("日期"); for (int i = 1; i < 21; i++) { columnNameV.add("商品" + i); } Vector<Vector<Object>> tableValueV = new Vector<>(); for (int row = 1; row < 31; row++) { Vector<Object> rowV = new Vector<>(); rowV.add(row); for (int col = 0; col < 20; col++) { rowV.add((int) (Math.random() * 1000)); } tableValueV.add(rowV); } final MFixedColumnTable_Modified panel = new MFixedColumnTable_Modified( columnNameV, tableValueV, 1); getContentPane().add(panel, BorderLayout.CENTER); } public static void main(String[] args) { JTable4_Modified frame = new JTable4_Modified(); frame.setVisible(true); }}package com.han;import java.awt.BorderLayout;import java.util.Vector;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JViewport;import javax.swing.ListSelectionModel;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;import javax.swing.table.AbstractTableModel;/** * <pre> * public boolean isCellEditable(int row, int column) { * return getModel().isCellEditable(convertRowIndexToModel(row), * convertColumnIndexToModel(column)); * } * </pre> * * so we can also directly rewrite the isCellEditable() in the table model. * * @author HAN * */public class MFixedColumnTable_Modified extends JPanel { private static final long serialVersionUID = -8001758880985479654L; private Vector<String> columnNameV; // declare the table column name vector private Vector<Vector<Object>> tableValueV; private int fixedColumn = 1; // the fixed column number private JTable fixedColumnTable; private FixedColumnTableModel fixedColumnTableModel; private JTable floatingColumnTable; private FloatingColumnTableModel floatingColumnTableModel; private class FixedColumnTableModel extends AbstractTableModel { private static final long serialVersionUID = 3935656415101599023L; @Override public int getRowCount() { return tableValueV.size(); } @Override public int getColumnCount() { return fixedColumn; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return tableValueV.get(rowIndex).get(columnIndex); } @Override public String getColumnName(int columnIndex) { return columnNameV.get(columnIndex); } } private class FloatingColumnTableModel extends AbstractTableModel { private static final long serialVersionUID = -2481466672947191281L; @Override public boolean isCellEditable(int row, int column) { return true; } @Override public int getRowCount() { return tableValueV.size(); } @Override public int getColumnCount() { return columnNameV.size() - fixedColumn; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return tableValueV.get(rowIndex).get(columnIndex + fixedColumn); } @Override public String getColumnName(int columnIndex) { return columnNameV.get(columnIndex + fixedColumn); } } private class MListSelectionListener implements ListSelectionListener { boolean isFixedColumnTable = true; public MListSelectionListener(boolean isFixedColumnTable) { this.isFixedColumnTable = isFixedColumnTable; } @Override public void valueChanged(ListSelectionEvent e) { if (isFixedColumnTable) { int row = fixedColumnTable.getSelectedRow(); floatingColumnTable.setRowSelectionInterval(row, row); } else { int row = floatingColumnTable.getSelectedRow(); fixedColumnTable.setRowSelectionInterval(row, row); } } } public MFixedColumnTable_Modified(Vector<String> columnNameV, Vector<Vector<Object>> tableValueV, int fixedColumn) { super(); setLayout(new BorderLayout()); this.columnNameV = columnNameV; this.tableValueV = tableValueV; this.fixedColumn = fixedColumn; // create fixedColumnTable fixedColumnTableModel = new FixedColumnTableModel(); fixedColumnTable = new JTable(fixedColumnTableModel); ListSelectionModel fixed = fixedColumnTable.getSelectionModel(); fixed.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); fixed.addListSelectionListener(new MListSelectionListener(true)); // create floatingColumnTable floatingColumnTableModel = new FloatingColumnTableModel(); floatingColumnTable = new JTable(floatingColumnTableModel); floatingColumnTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); ListSelectionModel floating = floatingColumnTable.getSelectionModel(); floating.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); floating.addListSelectionListener(new MListSelectionListener(false)); // create scrollPane JScrollPane scrollPane = new JScrollPane(); scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER, fixedColumnTable.getTableHeader()); JViewport viewport = new JViewport(); viewport.setView(fixedColumnTable); viewport.setPreferredSize(fixedColumnTable.getPreferredSize()); scrollPane.setRowHeaderView(viewport); // viewport 视口 scrollPane.setViewportView(floatingColumnTable); add(scrollPane, BorderLayout.CENTER); }} java表格控件绑定数据库 关于一个编译的问题 JAVA读网络文件,我怎么读出来图片有问题呢 java程序运行的初级问题,请指教 JTree CheckBox 问题 java有没有什么类可以构建HTTP头结构然后发送到目的地? 环境变量的配置!!新手求教!!! 求 Java实现资源管理器 或与之相关的程序 Map<String,Object> map = new HashMap<String,Object>(); 帮我看看为什么? 如何在swing中调用ocx影像控件? Swing table中放Jcombobox getselected拿到的不是当前行
package com.han;import java.awt.BorderLayout;
import java.util.Vector;import javax.swing.JFrame;/**
* Provide a fixed column in a table.
*
* <code><p>public boolean isCellEditable(int row, int column) {<p>
return getModel().isCellEditable(convertRowIndexToModel(row),<p>
convertColumnIndexToModel(column));<p>
}<p>
</code> so we can also directly rewrite the isCellEditable() in the table
* model.
*
* @author Gaowen
*
*/
public class JTable4_Modified extends JFrame {
private static final long serialVersionUID = 805308369080023303L; public JTable4_Modified() {
super();
setTitle("提供行标题栏的表格");
setBounds(100, 100, 500, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Vector<String> columnNameV = new Vector<>();
columnNameV.add("日期");
for (int i = 1; i < 21; i++) {
columnNameV.add("商品" + i);
}
Vector<Vector<Object>> tableValueV = new Vector<>();
for (int row = 1; row < 31; row++) {
Vector<Object> rowV = new Vector<>();
rowV.add(row);
for (int col = 0; col < 20; col++) {
rowV.add((int) (Math.random() * 1000));
}
tableValueV.add(rowV);
}
final MFixedColumnTable_Modified panel = new MFixedColumnTable_Modified(
columnNameV, tableValueV, 1);
getContentPane().add(panel, BorderLayout.CENTER);
} public static void main(String[] args) {
JTable4_Modified frame = new JTable4_Modified();
frame.setVisible(true);
}
}package com.han;import java.awt.BorderLayout;
import java.util.Vector;import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;/**
* <pre>
* public boolean isCellEditable(int row, int column) {
* return getModel().isCellEditable(convertRowIndexToModel(row),
* convertColumnIndexToModel(column));
* }
* </pre>
*
* so we can also directly rewrite the isCellEditable() in the table model.
*
* @author HAN
*
*/
public class MFixedColumnTable_Modified extends JPanel {
private static final long serialVersionUID = -8001758880985479654L;
private Vector<String> columnNameV; // declare the table column name vector
private Vector<Vector<Object>> tableValueV;
private int fixedColumn = 1; // the fixed column number
private JTable fixedColumnTable;
private FixedColumnTableModel fixedColumnTableModel;
private JTable floatingColumnTable;
private FloatingColumnTableModel floatingColumnTableModel; private class FixedColumnTableModel extends AbstractTableModel {
private static final long serialVersionUID = 3935656415101599023L; @Override
public int getRowCount() {
return tableValueV.size();
} @Override
public int getColumnCount() {
return fixedColumn;
} @Override
public Object getValueAt(int rowIndex, int columnIndex) {
return tableValueV.get(rowIndex).get(columnIndex);
} @Override
public String getColumnName(int columnIndex) {
return columnNameV.get(columnIndex);
}
} private class FloatingColumnTableModel extends AbstractTableModel {
private static final long serialVersionUID = -2481466672947191281L;
@Override
public boolean isCellEditable(int row, int column) {
return true;
} @Override
public int getRowCount() {
return tableValueV.size();
} @Override
public int getColumnCount() {
return columnNameV.size() - fixedColumn;
} @Override
public Object getValueAt(int rowIndex, int columnIndex) {
return tableValueV.get(rowIndex).get(columnIndex + fixedColumn);
} @Override
public String getColumnName(int columnIndex) {
return columnNameV.get(columnIndex + fixedColumn);
}
} private class MListSelectionListener implements ListSelectionListener {
boolean isFixedColumnTable = true; public MListSelectionListener(boolean isFixedColumnTable) {
this.isFixedColumnTable = isFixedColumnTable;
} @Override
public void valueChanged(ListSelectionEvent e) {
if (isFixedColumnTable) {
int row = fixedColumnTable.getSelectedRow();
floatingColumnTable.setRowSelectionInterval(row, row);
} else {
int row = floatingColumnTable.getSelectedRow();
fixedColumnTable.setRowSelectionInterval(row, row);
}
}
} public MFixedColumnTable_Modified(Vector<String> columnNameV,
Vector<Vector<Object>> tableValueV, int fixedColumn) {
super();
setLayout(new BorderLayout());
this.columnNameV = columnNameV;
this.tableValueV = tableValueV;
this.fixedColumn = fixedColumn;
// create fixedColumnTable
fixedColumnTableModel = new FixedColumnTableModel();
fixedColumnTable = new JTable(fixedColumnTableModel);
ListSelectionModel fixed = fixedColumnTable.getSelectionModel();
fixed.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
fixed.addListSelectionListener(new MListSelectionListener(true));
// create floatingColumnTable
floatingColumnTableModel = new FloatingColumnTableModel();
floatingColumnTable = new JTable(floatingColumnTableModel);
floatingColumnTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
ListSelectionModel floating = floatingColumnTable.getSelectionModel();
floating.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
floating.addListSelectionListener(new MListSelectionListener(false));
// create scrollPane
JScrollPane scrollPane = new JScrollPane();
scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER,
fixedColumnTable.getTableHeader());
JViewport viewport = new JViewport();
viewport.setView(fixedColumnTable);
viewport.setPreferredSize(fixedColumnTable.getPreferredSize());
scrollPane.setRowHeaderView(viewport); // viewport 视口
scrollPane.setViewportView(floatingColumnTable);
add(scrollPane, BorderLayout.CENTER);
}
}