你们在我的上一个问题上指出了正确的方向,你们真是太棒了,我在这里有一些原始问题的扩展:
如何将JTable列设置为String并排序为Double?
我现在通过使用我的自定义单元格渲染器将我的价格列格式化为$ ###,## 0.00,我现在也为单元格设置了一个JTextField编辑器.编辑单元格工作正常,除了更新值时,我的自定义渲染器中设置的数字格式似乎不再格式化单元格(我在编辑提交后丢失了$).即使在初始显示数据之后,此渲染器是否也不应渲染单元格?
我试过使用以下但没有运气:
((AbstractTableModel) table.getModel()).fireTableDataChanged();
Run Code Online (Sandbox Code Playgroud)
我希望这会强制表重新验证并使用自定义渲染器重新绘制单元格以呈现新值,但遗憾的是这不起作用...
我错过了什么......显然,但是什么?
当要选择单元格时是否会触发任何事件?有ListSelectionListener,但它只有在选择发生后触发的事件.我需要一些方法来取消选择事件并使用ListSelectionListener它并不容易,因为选择已经发生,我需要一些状态变量,指示选择是正常还是取消先前的选择.
有没有办法关闭选择通知?然而,这不是100%好的解决方案(如果某些侦听器在其本地存储中保存选择状态会有问题)这总比没有好.
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.JTable;
public class JTableExample extends JFrame {
/**
*
*/
private static final long serialVersionUID = 6040280633406589974L;
private JPanel contentPane;
private JTable table;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JTableExample frame = new JTableExample();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
}); …Run Code Online (Sandbox Code Playgroud) 我有一个JTable,有一列是文本,不可编辑,第二列是一个显示布尔值的复选框....现在我想要的是,当用户选择多行并取消选中任何一行时选中复选框,然后选中下面的所有复选框都应取消选中,反之亦然.
我有一个JTable需要对用户可以输入文本的单元格进行单元验证.当用户输入无效文本时,单元格的边框变为红色.
我设法让这个工作关联一个二维数组来标记每个单元格是否有错误.
问题是用户必须能够重新排序表(按列).我必须将错误标志存储在表模型中,而不是分开存储.任何人都有想法如何做到这一点?
我的JTable有一个密码字段编辑器.我想在用户单击编辑另一个字段时,如果文本长度小于8位,则显示错误消息.我尝试过焦点听众.但它不起作用.请帮帮我,因为我刚刚开始使用java swing.
class PasswordEditor extends DefaultCellEditor
{
TextBox m_passWord = new TextBox();
public PasswordEditor() {
super(new TextBox());
}
@Override
public Object getCellEditorValue() {
return this.m_passWord.getText();
}
@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
Object fieldValue = value;
if(null == fieldValue)
fieldValue = Constants.EMPTY_STRING;
this.m_passWord.addInputMethodListener(new InputMethodListener() {
@Override
public void inputMethodTextChanged(InputMethodEvent event)
{
// TODO Auto-generated method stub
}
@Override
public void caretPositionChanged(InputMethodEvent event)
{
// TODO Auto-generated method stub
}
})
this.m_passWord.addFocusListener(new FocusListener() …Run Code Online (Sandbox Code Playgroud) 让我首先解释一下我想要实现的目标。我正在 Swing 中创建一个数据输入表单,由许多 JComboBox 和 JTextField 组成。验证例程迭代这些组件并确定为每个控件指定的值是否“有效”(验证的详细信息与本示例的目的无关)。
当例程识别出某个组件包含无效值时,我想更改该字段的背景颜色以及该字段的前景/文本颜色 - 让用户清楚该字段存在问题。
在字段被视为“有效”的情况下,我想将控件的背景设置为白色 - 并将前景/文本设置为黑色。
到目前为止,所有这些都非常简单,并且都可以在下面附加的演示代码中实现。
当组合框包含有效值并且获得焦点时,组合内编辑器的背景将设置为蓝色,我对此非常满意。
但是,我想要实现的是当组合框包含无效值时更改用于突出显示聚焦组合框的颜色。尽管已将组合框的背景颜色更改为粉红色,但如果控件获得焦点,它仍然使用蓝色来指示它获得焦点。
聚焦的无效字段示例: http://postimg.org/image/ne9xgjch3/
尽管我明白这是完全正常的行为,但我想做的是将用于突出显示“无效”字段之一的颜色更改为非聚焦和无效控件所具有的较暗颜色- 这样用户仍然可以看到哪个控件获得焦点,并且它仍然是粉红色的。我明白这可能看起来很小,但我的最终用户坚持认为在聚焦时整个字段保持粉红色(或者更确切地说,不同色调的粉红色)。这就是我的乌托邦,一个集中且“无效”的领域,看起来像这样:
http://postimg.org/image/9793bqcfj/
我尝试扩展 DefaultListCellRenderer 和 BasicComboBoxEditor 类,并将它们分别针对组合框设置为渲染器和编辑器。我的印象是编辑器将是我需要集中注意力的地方,因此在类的 getEditorComponent 方法中,我将返回一个具有适当背景和前景的标签 - 但是在该方法中,我无法知道控件是否具有焦点,因此无法确定应如何格式化返回的标签。此外,一旦我开始针对组合框设置编辑器,我似乎就完全失去了集中控制的能力 - 尽管这可能是因为我缺乏如何实现编辑器的知识。
我也一直在阅读有关 BasicComboBoxUI 的内容,但我遇到的任何解决方案都不是突出的。
请有人好心地为我指明正确的方向,我花了几天时间修补这个问题,这真的开始让我烦恼。请原谅 netbeans 生成的演示代码,它只是为了让我快速拼凑出一个演示。
package com.test;
import java.awt.*;
public class TestForm extends javax.swing.JFrame {
public TestForm()
{
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
cboOne = new javax.swing.JComboBox();
txtOne = new javax.swing.JTextField();
txtTwo = new javax.swing.JTextField();
btnValidate = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); …Run Code Online (Sandbox Code Playgroud) 我对 Java 和编程本身比较陌生,所以请原谅我的问题。我正在尝试做的是以下内容:
我正在制作一个簿记程序。在显示收入/结果的列上,我希望当用户输入负数(例如 -1.150 欧元)时,数字变为红色(或任何颜色,但大多数簿记程序使用红色)。仅该列上的特定单元格。我还没有开始使用代码,所以我不能在这里输入。我也不需要它右对齐,因为我已经这样做了。
附注。抱歉,如果此帖子/问题已经存在,我进行了搜索,但没有找到对我有多大帮助的内容。
java ×7
swing ×7
jtable ×6
cellrenderer ×1
double ×1
focus ×1
jcheckbox ×1
jcombobox ×1
tablemodel ×1