我有一张这样的桌子.第二列使用JTextField渲染器,第三列使用基于JPasswordField的渲染器和编辑器.

看起来不错.但问题是我们必须输入值并且必须点击"ENTER".在该图像中,我输入了密码,但未按Enter键.因此,如果我单击"保存并关闭"按钮,它将显示密码字段为空的错误.
以前我在JTabbedPane下只使用了JTextFields和JPasswordFields,效果很好.当我不得不添加越来越多的东西时,我把它改成了这样的表格.
现在我已经贴了一个标签让人们知道他们应该点击进入..这不太好.另一个大问题.在Nimbus的Atleast外观和感觉,我们得知这个领域仍然是焦点.在Windows系统外观中,无论字段是否聚焦,都没有太多明显的区别.

当我点击"保存并关闭"按钮时,我需要用户名字段或密码字段来设置它的值.请帮我.
我想为jTable中的特定行着色..我使用此代码为列做了,
private class CustomCellRenderer extends DefaultTableCellRenderer {
/* (non-Javadoc)
* @see
javax.swing.table.DefaultTableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
*/
@Override
public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) {
Component rendererComp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus,row, column);
//Set foreground color
// rendererComp.setForeground(Color.red);
//Set background color
rendererComp .setBackground(Color.pink);
return rendererComp ;
}
}
Run Code Online (Sandbox Code Playgroud)
我用上面的代码调用,
jTable1.getColumnModel().getColumn(3).setCellRenderer(new CustomCellRenderer());
Run Code Online (Sandbox Code Playgroud)
但是我想对jTable中的行做同样的事情.在行的情况下没有getColumnModel()或getColumn().那么这样做的替代方法是什么?我是通过使用Java Swing在Netbeans中完成的.
我写了一个程序,我根据标准突出显示某些行.我发布了一个问题: - JTable CustomRenderer Issue
给出这个问题的解决方案是我需要为不符合条件的行设置其他颜色.所以我决定在其他地方我会使用默认颜色JTable.修改后的代码是
else{
c.setForeground(DefaultLookup.getColor(this, ui, "Table.dropCellForeground"));
c.setBackground(DefaultLookup.getColor(this, ui, "Table.dropCellBackground"));
}
Run Code Online (Sandbox Code Playgroud)
到目前为止这么好,我得到了必要的行为,但是当我试图让jar跟随警告时: -
警告:DefaultLookup是内部专有API,可能会在将来的版本中删除
所以任何人都可以建议我是否有任何其他方法将行设置为默认颜色JTable.
我正在尝试创建一个表格和颜色特定的单元格,黄色,红色或白色,具体取决于其他列的内容.为此,我循环填充值的行,然后检查内容.对于当前显示在屏幕上的每一行都可以正常工作,但是当程序到达未显示的行时,或者如果用户尝试滚动每个单元格,则将其背景颜色更改为白色.我在网上搜索了解决方案,唯一合理的想法是在每次循环后重置cellRenderer,这不起作用,因为它也会重置每个单元格.
我希望有人知道这方面的解决方案,或者可以让我知道我在哪里搞砸了什么.
我正在使用这个循环
for(int e = 0; e < modules.size(); e++)
{
gui.clearOutputStream();
gui.getOutputStream().setText("Load Modul " + modules.get(e) + "\r\n");
version = getVersion(modules.get(e));
//Update current Row
updateRow(gui.getReleaseTabelle(), e);
}
Run Code Online (Sandbox Code Playgroud)
它调用这种方法
public void updateRow(JTable target, int row){
//...
//insert Values here
//...
CustomRenderer cr = new CustomRenderer();
cr.tab = target;
if(!target.getValueAt(row, 2).equals(target.getValueAt(row, 3)))
{
cr.Val1 = target.getValueAt(row, 1).toString();
target.setValueAt("X", row, 1);
}
else if(!target.getValueAt(row, 7).equals(""))
{
cr.Val1 = target.getValueAt(row, 1).toString();
target.setValueAt("Y", row, 1);
}
else
{
}
target.getColumnModel().getColumn(1).setCellRenderer(cr);
}
Run Code Online (Sandbox Code Playgroud)
这是我的CustomRenderer
class …Run Code Online (Sandbox Code Playgroud) 我有一个JTable,每行有三列,见图:

出于某种原因,取决于我选择的列,我在上面的图像中得到它周围的小深蓝色边框(V140116554).
我目前使用它来选择整行:
vTable.setRowSelectionAllowed(true);
Run Code Online (Sandbox Code Playgroud)
我怎么能禁用它?
编辑:
添加了一个类:
public class VisitorRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setBorder(noFocusBorder);
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
并补充说:
vTable.setDefaultRenderer(String.class, new VisitorRenderer());
Run Code Online (Sandbox Code Playgroud)
但仍然得到边界
我试图让表格上的标题有自动换行.我已设法做到这一点,但第一个数据行正在扩展.该表的代码是:
public class GenerateTable extends JTable {
private JCheckBox boxSelect = new JCheckBox();
private JTableHeader hdGen;
public class LineWrapCellRenderer extends JTextArea implements TableCellRenderer {
private static final long serialVersionUID = 1L;
int rowHeight = 0; // current max row height for this scan
@Override
public Component getTableCellRendererComponent(
JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column)
{
/*
* row < 0 means header
*/
if(row >= 0) {
setWrapStyleWord(false);
return this;
}
setText((String) value);
setWrapStyleWord(true);
setLineWrap(true); …Run Code Online (Sandbox Code Playgroud) 我正在使用NimbusLookAndFeel.有了这种外观和感觉JTable的单元格背景是白色和浅灰色(它取决于行号).现在,我正在编写一些实现TableCellRenderer的自定义单元格渲染器.我需要根据JTable中单元格的位置设置这些渲染器的背景.
public class MyCellRenderer extends JLabel implements TableCellRenderer{
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Color bgColor = //need to retrieve the right cell background color
setBackground(bgColor);
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得这样的Color值?
我有一个JTable显示双倍的多列,其中一些是比率,其他列是美元值.我想指定一个TableCellRenderer用于比率,另一个用于美元值.
java教程说"要指定特定列中的单元格应该使用渲染器,您可以使用该TableColumn方法setCellRenderer".这很有帮助,但我不清楚我应该在什么时候将这种方法称为我TableColumn的方法.有这样做的标准方法吗?我应该JTable在其构造函数中创建一个自定义的自定义吗?还是习俗TableColumnModel?理想情况下,我希望能够从TableModel我已有的自定义中做到这一点,尽管这似乎不太可能.
任何帮助,将不胜感激.谢谢
例如,我有一个日期存储为VARCHAR(yyyy-mm-dd)的SQLite数据库'2013-01-25'.我的查询从表中检索记录并将其显示为存储.我需要VARCHAR在JTable"2013年1月25日星期五"中显示数据.我怀疑使用setCellRenderer作为包含VARCHAR的列是可行的方法.此外,我认为这将是一个两步过程:首先,将VARCHAR转换为日期值,然后根据需要格式化日期.如果我从中获取VARCHAR值JTable并在以下位置显示它,我可以这样做JTextField:
MyDate = new SimpleDateFormat("yyyy-MM-dd").parse(rs.getString("My_Date"));
Run Code Online (Sandbox Code Playgroud)
然后根据需要格式化它
MyDateStr = new SimpleDateFormat("EEEE MMMM d, yyyy").format(MyDate);
Run Code Online (Sandbox Code Playgroud)
这一切都很好,也很好; 但是,我需要JTable列中的格式化显示.我从未使用过setCellRenderer,所以我可以使用一些帮助入门.
如何使JTable中的文本变为粗体,我尝试了以下内容,它确实适用于颜色但是为了使文本变粗,我在某处出错了
class ColourRender extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable tblData,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
Component cellComponent = super.getTableCellRendererComponent(
tblData, value, isSelected, hasFocus, row, column);
if (tblData.getValueAt(row, 3).equals("M")) {
cellComponent.setForeground(forMen);
} else {
cellComponent.setForeground(forWomen);
}
return cellComponent;
}
class boldRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable tblData,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
Component cellComponent = super.getTableCellRendererComponent(
tblData, value, isSelected, hasFocus, row, column);
if (tblData.getValueAt(row, 1).equals(bib)) {
cellComponent.setFont(cellComponent.getFont().deriveFont(
Font.BOLD)); …Run Code Online (Sandbox Code Playgroud) jtable ×10
swing ×10
java ×8
background ×1
border ×1
date ×1
jtableheader ×1
nimbus ×1
tablecolumn ×1