- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
毫无疑问,这将是一个简单的解决方案,但像往常一样,我被难住了。
我正在尝试使用 JCheckBox 过滤掉 JTable 中不可渲染的字体系列名称。 JTable 包含已安装的字体系列名称(第 0 列)、示例字母表(第 1 列)和示例数字(第 2 列)。
第一列和第二列以其相应的字体呈现,并且如果文本在单元格无法渲染,使用 JTable.setValueAt(Object, int, int) 将文本替换为“不可渲染”。
然后我使用“不可渲染”作为过滤器。但是,仅过滤可见的行。当我滚动到表格底部并应用过滤器时,整个表格都会根据需要进行过滤。
我还注意到,当我移动水平分隔线时,分隔线在更改的单元格上移动时不会重新绘制自身。对此的任何帮助也将不胜感激。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;
class run
{
public static void main(String args[])
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
Viewer viewer = new Viewer();
JFrame jframe = new JFrame();
jframe.add(viewer);
jframe.createBufferStrategy(1);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setLocation(50,50);
jframe.pack();
jframe.setVisible(true);
}
});
}
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
class Viewer extends JPanel
{
final static long serialVersionUID = 0;
String string_alphabet = "abcdefghijklmnopqrstuvwxyz";
String string_digits = "0123456789";
String string_punctuation = "`!:\";\',.-/(){}[]<>?";
String string_symbols = "~@#$%^&*_+=|\\";
String string_installedFontsColumnNames[] = {"installed fonts","sample","sample"};
String string_installedFonts[];
DefaultTableModel defaultTableModel_installedFonts;
JTable jtable_installedFonts;
JSplitPane jsplitPane_horizontal;
JSplitPane jsplitPane_vertical;
JCheckBox jcheckBox_nonRenderable;
TableRowSorter<TableModel> tableRowSorter;
public Viewer()
{
this.setLayout(new BorderLayout());
JPanel jpanel_installedFonts = new JPanel(new BorderLayout());
GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
string_installedFonts = graphicsEnvironment.getAvailableFontFamilyNames();
Object object_tableData[][] = new Object[string_installedFonts.length][string_installedFontsColumnNames.length];
for (int row = 0; row < object_tableData.length; row++)
{
Object object_columnData[] = new Object[string_installedFontsColumnNames.length];
object_columnData[0] = string_installedFonts[row];
object_columnData[1] = string_alphabet;
object_columnData[2] = string_digits;
object_tableData[row] = object_columnData;
}
defaultTableModel_installedFonts = new DefaultTableModel(object_tableData,string_installedFontsColumnNames);
tableRowSorter = new TableRowSorter<TableModel>(defaultTableModel_installedFonts);
jtable_installedFonts = new JTable(defaultTableModel_installedFonts);
jtable_installedFonts.setRowSorter(tableRowSorter);
jtable_installedFonts.getColumnModel().getColumn(0).setCellRenderer(new ColumnRenderer0());
jtable_installedFonts.getColumnModel().getColumn(1).setCellRenderer(new ColumnRenderer1());
jtable_installedFonts.getColumnModel().getColumn(2).setCellRenderer(new ColumnRenderer1());
JScrollPane jscrollPane_installedFonts = new JScrollPane(jtable_installedFonts);
jpanel_installedFonts.add(jscrollPane_installedFonts,BorderLayout.CENTER);
JPanel jpanel_visibilityOptions = new JPanel(new GridLayout(1,2));
jpanel_visibilityOptions.setBackground(Color.gray);
JPanel jpanel_nonRenderable = new JPanel();
jpanel_nonRenderable.setBackground(Color.lightGray);
jcheckBox_nonRenderable = new JCheckBox("hide non-renderable fonts",false);
jcheckBox_nonRenderable.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent actionEvent)
{
RowFilter<Object,Object> filter = null;
if (jcheckBox_nonRenderable.isSelected())
{
filter = RowFilter.notFilter(RowFilter.regexFilter("non-renderable"));
}
tableRowSorter.setRowFilter(filter);
}
});
jpanel_nonRenderable.add(jcheckBox_nonRenderable,BorderLayout.CENTER);
jpanel_visibilityOptions.add(new JPanel());
jpanel_visibilityOptions.add(jpanel_nonRenderable);
jpanel_installedFonts.add(jpanel_visibilityOptions,BorderLayout.SOUTH);
jsplitPane_horizontal = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jpanel_installedFonts,new JPanel());
jsplitPane_horizontal.setBorder(new EmptyBorder(0,0,0,0));
jsplitPane_vertical = new JSplitPane(JSplitPane.VERTICAL_SPLIT,jsplitPane_horizontal,new JPanel());
jsplitPane_vertical.setBorder(new EmptyBorder(0,0,0,0));
this.add(jsplitPane_vertical,BorderLayout.CENTER);
}
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
class ColumnRenderer0 implements TableCellRenderer
{
JLabel jlabel;
Color color_background;
Color color_foreground;
String string_cellText;
public ColumnRenderer0()
{
jlabel = new JLabel();
jlabel.setBorder(new EmptyBorder(0,2,0,2));
jlabel.setHorizontalAlignment(JLabel.LEFT);
jlabel.setOpaque(true);
}
public Component getTableCellRendererComponent(JTable jtable, Object object, boolean selected, boolean focus, int row, int column)
{
string_cellText = (String)object;
if (selected)
{
color_background = jtable.getSelectionBackground();
color_foreground = jtable.getSelectionForeground();
}
else
{
color_background = jtable.getBackground();
color_foreground = jtable.getForeground();
}
jlabel.setText(string_cellText);
jlabel.setBackground(color_background);
jlabel.setForeground(color_foreground);
return jlabel;
}
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
class ColumnRenderer1 implements TableCellRenderer
{
JLabel jlabel;
Color color_background;
Color color_foreground;
String string_cellText;
String string_fontFamily;
Font font;
Font font_jtable;
public ColumnRenderer1()
{
jlabel = new JLabel();
jlabel.setBorder(new EmptyBorder(0,5,0,5));
jlabel.setHorizontalAlignment(JLabel.CENTER);
jlabel.setOpaque(true);
}
public Component getTableCellRendererComponent(JTable jtable, Object object, boolean selected, boolean focus, int row, int column)
{
string_cellText = (String)object;
if (selected)
{
color_background = jtable.getSelectionBackground();
color_foreground = jtable.getSelectionForeground();
}
else
{
color_background = jtable.getBackground();
color_foreground = jtable.getForeground();
}
string_fontFamily = (String)jtable.getValueAt(row,0);
font_jtable = jtable.getFont();
font = new Font(string_fontFamily,Font.PLAIN,font_jtable.getSize());
if (font.canDisplayUpTo(string_cellText) != -1)
{
font = new Font(font_jtable.getFamily(),Font.BOLD,font_jtable.getSize());
string_cellText = "non-renderable";
jtable.setValueAt(string_cellText,row,column);
color_foreground = Color.red;
}
jlabel.setFont(font);
jlabel.setText(string_cellText);
jlabel.setBackground(color_background);
jlabel.setForeground(color_foreground);
return jlabel;
}
}
最佳答案
问题是,在渲染单元格之前,文本仍保留为您最初设置的内容。不可见的单元格不会被渲染,因此模型不会被更新。由于不同的原因,过滤发生在不同的时间。
您不应该从渲染器内修改模型的状态,而应该在构建表格模型时预先确定字体是否可渲染并相应地设置单元格值...
关于java - JTable RowFilter 不过滤初始调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26035204/
为了让我的代码几乎完全用 Jquery 编写,我想用 Jquery 重写 AJAX 调用。 这是从网页到 Tomcat servlet 的调用。 我目前情况的类似代码: var http = new
我想使用 JNI 从 Java 调用 C 函数。在 C 函数中,我想创建一个 JVM 并调用一些 Java 对象。当我尝试创建 JVM 时,JNI_CreateJavaVM 返回 -1。 所以,我想知
环顾四周,我发现从 HTML 调用 Javascript 函数的最佳方法是将函数本身放在 HTML 中,而不是外部 Javascript 文件。所以我一直在网上四处寻找,找到了一些简短的教程,我可以根
我有这个组件: import {Component} from 'angular2/core'; import {UserServices} from '../services/UserService
我正在尝试用 C 实现一个简单的 OpenSSL 客户端/服务器模型,并且对 BIO_* 调用的使用感到好奇,与原始 SSL_* 调用相比,它允许一些不错的功能。 我对此比较陌生,所以我可能会完全错误
我正在处理有关异步调用的难题: 一个 JQuery 函数在用户点击时执行,然后调用一个 php 文件来检查用户输入是否与数据库中已有的信息重叠。如果是这样,则应提示用户确认是否要继续或取消,如果他单击
我有以下类(class)。 public Task { public static Task getInstance(String taskName) { return new
嘿,我正在构建一个小游戏,我正在通过制作一个数字 vector 来创建关卡,该数字 vector 通过枚举与 1-4 种颜色相关联。问题是循环(在 Simon::loadChallenge 中)我将颜
我有一个java spring boot api(数据接收器),客户端调用它来保存一些数据。一旦我完成了数据的持久化,我想进行另一个 api 调用(应该处理持久化的数据 - 数据聚合器),它应该自行异
首先,这涉及桌面应用程序而不是 ASP .Net 应用程序。 我已经为我的项目添加了一个 Web 引用,并构建了各种数据对象,例如 PayerInfo、Address 和 CreditCard。但问题
我如何告诉 FAKE 编译 .fs文件使用 fsc ? 解释如何传递参数的奖励积分,如 -a和 -target:dll . 编辑:我应该澄清一下,我正在尝试在没有 MSBuild/xbuild/.sl
我使用下划线模板配置了一个简单的主干模型和 View 。两个单独的 API 使用完全相同的配置。 API 1 按预期工作。 要重现该问题,请注释掉 API 1 的 URL,并取消注释 API 2 的
我不确定什么是更好的做法或更现实的做法。我希望从头开始创建目录系统,但不确定最佳方法是什么。 我想我在需要显示信息时使用对象,例如 info.php?id=100。有这样的代码用于显示 Game.cl
from datetime import timedelta class A: def __abs__(self): return -self class B1(A):
我在操作此生命游戏示例代码中的数组时遇到问题。 情况: “生命游戏”是约翰·康威发明的一种细胞自动化技术。它由一个细胞网格组成,这些细胞可以根据数学规则生存/死亡/繁殖。该网格中的活细胞和死细胞通过
如果我像这样调用 read() 来读取文件: unsigned char buf[512]; memset(buf, 0, sizeof(unsigned char) * 512); int fd;
我用 C 编写了一个简单的服务器,并希望调用它的功能与调用其他 C 守护程序的功能相同(例如使用 ./ftpd start 调用它并使用 ./ftpd stop 关闭该实例)。显然我遇到的问题是我不知
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
我希望能够从 cmd 在我的 Windows 10 计算机上调用 python3。 我已重新安装 Python3.7 以确保选择“添加到路径”选项,但仍无法调用 python3 并使 CMD 启动 P
我是一名优秀的程序员,十分优秀!