我在 JTable 中使用 JButton 作为渲染和编辑器,存在以下问题:
任何帮助将不胜感激!
我正在尝试为特定列设置渲染器,但不知何故此渲染器并未用于渲染该列。对此有什么解释吗?
tabledata = new LendDataTable();
table.setModel(tabledata);
TableColumn xx = table.getColumnModel().getColumn(3);
xx.setCellRenderer(new BookBackRenderer());//here it doesn't (there are 7 rows in total)
table.setDefaultRenderer(Integer.class, new BookBackRenderer());// here it works
add(table, BorderLayout.CENTER);
public class BookBackRenderer extends DefaultTableCellRenderer {
/**
*
*/
private static final long serialVersionUID = 1L;
public BookBackRenderer() {
// TODO Auto-generated constructor stub
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
System.out.println(column);
return super.getTableCellRendererComponent(table, value.toString() + "xy", isSelected, hasFocus, row, column);
} …Run Code Online (Sandbox Code Playgroud) 我已尝试http://java-swing-tips.blogspot.com/2009/10/multiple-jbuttons-in-jtable-cell.html上的教程来生成下表。

现在,我需要创建一个表格,每行都有不同的按钮。请帮我。

我在理解单元格渲染器时遇到一些困难。StretchIcon我想在 a 中使用JTable,以便列的单元格显示调整大小的徽标。StretchIcon延伸ImageIcon。
自定义渲染器:
public class IconCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = new JLabel();
label.setIcon( (Icon) ( new StretchIcon((Image) value) ) );
return label;
}
}
Run Code Online (Sandbox Code Playgroud)
该代码按预期工作,我对表格没有任何问题。
从本教程中,我了解到出于getTableCellRendererComponent性能原因,我应该避免创建新对象。
我不明白:
将被实例化多少次IconCellRenderer。我假设只有一次,在JTable创建时(假设表中只有一列)。
getTableCellRendererComponent会被调用多少次。我假设列中的每个单元格都调用一次,以便它可以为每个单元格返回一个JLabel带有嵌入实例的新实例StretchIcon。StretchIcon如果这是真的,那么在方法中 创建 JLabel 和 的新实例就有意义了。
需要时如何重新绘制调整大小的图标(隐藏单元格然后再次显示,或调整单元格大小)?我假设getTableCellRendererComponent根本不参与此操作,并且这完全是使用paintJLabel …
我正在从访问数据库填充 JTable。第一次运行代码时,表加载完美。然后从 JDialog 向数据库添加新记录。我试图做的是loadData()在 JDialog 关闭时调用方法,但表没有更新。
这是我的loadData()方法:
private void loadData() {
System.out.println("sssss");
final String [] columnNames={"Seq", "First Name", "Last Name","Num1","Num2","Num3"};
connectDb();
data = new Object[rows][columns];
int row = 0;
try {
while(rs.next()){
for(int col = 0 ; col<columns; col++ ){
if(col==0)
data[row][col]=rs.getString("contact_seq");
if(col==1)
data[row][col]=rs.getString("contact_fname");
if(col==2)
data[row][col]=rs.getString("contact_lname");
if(col==3)
data[row][col]=rs.getString("contact_num1");
if(col==4)
data[row][col]=rs.getString("contact_num2");
if(col==5)
data[row][col]=rs.getString("contact_num3");
}
row++;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
model = new DefaultTableModel(data, columnNames){
/**
*
*/
private …Run Code Online (Sandbox Code Playgroud) 我有一个在 IntelliJ 的 GUI 设计器中制作的 JTable 组件。该类绑定到 GUI 窗体并且编译没有问题,但表保持为空。我也尝试使用其他一些代码,但我对 Java 有点陌生,真的很想知道这个问题的答案。请不要给我一半的答案或将我指向一个页面来弄清楚。我在这里是因为我确实尝试过。
package com.company;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
/**
* Created by User on 3/8/2016.
*/
public class TableGUI {
private static JFrame frame;
private JTable table1;
private JPanel panel1;
public TableGUI() {
DefaultTableModel model = new DefaultTableModel();
table1.setAutoCreateRowSorter(true);
table1.setFillsViewportHeight(true);
table1.setPreferredScrollableViewportSize(new Dimension(550, 200));
model.addColumn("Id");
model.addColumn("First Name");
model.addColumn("Last Name");
model.addColumn("Company Name");
table1.setModel(model);
}
public static void main(String[] args) {
frame = new JFrame("TableGUI");
frame.setContentPane(new TableGUI().panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
frame.setSize(new Dimension(600, …Run Code Online (Sandbox Code Playgroud) 我有一个JTable将动态填充的表,我希望表始终调整大小以适应行数。我不需要任何滚动,因为表格位于面板中,并且需要打印面板的内容。我试过这个:
Dimension d = itemsTable.getPreferredSize();
//scrollPane.setPreferredSize(new Dimension(d.width,itemsTable.getRowHeight()*itemsTable.getRowCount()+10));
itemsTable.setPreferredScrollableViewportSize(new Dimension(d.width,itemsTable.getRowHeight()*itemsTable.getRowCount()+1))
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。
public void getDetails(PosView pv){
Connection con = con();
DefaultTableModel model = (DefaultTableModel)pv.getItemsTable().getModel();
String date = null;
double total = 0.0, paid = 0.0;
try{
ps = con.prepareStatement("SELECT DISTINCT AMOUNT_PAYABLE, AMOUNT_PAID, BALANCE, DATE FROM SALES WHERE PAYMENT_ID = ?");
ps.setString(1, paymentId);
rs = ps.executeQuery();
while(rs.next()){
total = (rs.getDouble(1));
paid += (rs.getDouble(2));
date = rs.getString(4);
}
double balance = total - paid;
pv.setDate(date);
pv.setPaymentId(paymentId);
ps = con.prepareStatement("SELECT QUANTITY, ITEM_NAME, SELLING_PRICE, …Run Code Online (Sandbox Code Playgroud) 我编写了一个简单的程序来创建一个空的 JTable。但是当我显示表格时,表格下方会出现一个额外的空白。现在我想删除表格行下方的空白。
JTable 程序:
public class Table extends JFrame {
Table()
{
int numColoumns=5;
int numRows=10 ;
String[] colHeadings = {"COLUMN1","COLUMN2","COLUMN3","COLUMN4","COLUMN5"};
DefaultTableModel model = new DefaultTableModel(numRows, numColoumns) ;
model.setColumnIdentifiers(colHeadings);
JTable table = new JTable(model);
JTableHeader head = table.getTableHeader();
Container c = getContentPane();
c.setLayout(new BorderLayout());
c.add("North", head);
c.add("Center",table);
}
public static void main(String[] args) throws NumberFormatException, IOException
{
Table t = new Table();
t.setSize(500,400);
t.setVisible(true);
t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}}
Run Code Online (Sandbox Code Playgroud)
程序给了我一个表格,但行没有完全填满窗口。它显示了一个窗口,具有给定的高度和宽度(以像素为单位)以及相应的行数。在创建的行下方,它显示了一个额外的空间,因为这些行没有填充到窗口中。任何人都可以帮助我从窗口中删除多余的空间。
抱歉,我创建了输出图像,但上传图像时出现问题。
我遇到了JFrame未显示JTable添加到其中的问题。我已经试过了getContentPane().add(..),我已经切换到只是添加以保持代码更短一些。任何帮助都非常感谢!
package com.embah.Accgui;
import java.awt.*;
import javax.swing.*;
public class accCreator extends JFrame {
private String[] columnNames = {"Username", "Password", "Members", "World"};
private Object[][] data = {{"b", "b", "b", "b"},
{ "e", "e", "e", "e"}};
private JTable tbl_Accounts;
private JScrollPane scrollPane;
private JLabel lbl_Account = new JLabel();
private JLabel lbl_Username = new JLabel();
private JLabel lbl_Password = new JLabel();
private JLabel lbl_Homeworld = new JLabel();
private JButton btn_Select = new JButton();
private JButton btn_Addacc = …Run Code Online (Sandbox Code Playgroud) 我有许多行JTable,每行都有删除按钮.我想在单击该行的删除按钮时删除当前行.我怎样才能做到这一点?
private JButton button;
public MyTableButtonEditor1() {
button = new JButton("REMOVE");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
DbUtility ViewEmployee =new DbUtility();
ViewEmployee.loadDriver();
ViewEmployee.connect();
ResultSet rs= ViewEmployee.executeDeleteQuery(Employeeid);
JOptionPane.showMessageDialog(null, "Employee Removed");
}
});
}
Run Code Online (Sandbox Code Playgroud)
数据库连接
public ResultSet executeDeleteQuery(String Employeeid ) {
PreparedStatement pstmt ;
try {
pstmt = conn.prepareStatement("DELETE FROM employee WHERE EmployeeId ="+Employeeid );
pstmt.execute();
}
catch (SQLException ex){
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
} …Run Code Online (Sandbox Code Playgroud)