- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我注意到 SwingX 的 Highlighter
接口(interface)允许荧光笔返回与传入的组件不同的组件。我实际上找不到任何使用此组件的示例,但我想我会尝试用它来创建某种假的第二列。
预期的结果是左列中的文本应截断右列开始的位置,因此我不能只使用 Painter
。右列应该为整个列表呈现相同的宽度,这是一个我还没有弄清楚的问题,但看起来并不难。
就目前而言,我发现行高被压缩得非常小,你看不到任何文本。
这就是我的意思:
示例程序:
import java.awt.BorderLayout;
import java.awt.Component;
import javax.swing.DefaultListModel;
import javax.swing.GroupLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.LayoutStyle;
import javax.swing.SwingUtilities;
import org.jdesktop.swingx.JXList;
import org.jdesktop.swingx.decorator.AbstractHighlighter;
import org.jdesktop.swingx.decorator.ComponentAdapter;
import org.jdesktop.swingx.renderer.JRendererLabel;
import org.jdesktop.swingx.renderer.StringValue;
public class RendererTest implements Runnable
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new RendererTest());
}
@Override
public void run()
{
JFrame frame = new JFrame("Highlighter test");
JXList list = new JXList();
DefaultListModel<String> listModel = new DefaultListModel<>();
listModel.addElement("one");
listModel.addElement("two");
listModel.addElement("three");
list.setModel(listModel);
list.setVisibleRowCount(8);
list.setPrototypeCellValue("some string");
list.addHighlighter(new AddSecondColumnHighlighter(v -> ((String) v).toUpperCase()));
JScrollPane listScroll = new JScrollPane(list);
frame.setLayout(new BorderLayout());
frame.add(listScroll, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
private static class AddSecondColumnHighlighter extends AbstractHighlighter
{
private final StringValue secondColumnStringValue;
public AddSecondColumnHighlighter(StringValue secondColumnStringValue)
{
this.secondColumnStringValue = secondColumnStringValue;
}
@Override
protected Component doHighlight(Component component, ComponentAdapter adapter)
{
JRendererLabel rightColumn = new JRendererLabel();
rightColumn.setText(secondColumnStringValue.getString(adapter.getValue()));
return new FixedSecondColumnRendererLabel(component, rightColumn);
}
}
private static class FixedSecondColumnRendererLabel extends JRendererLabel
{
private FixedSecondColumnRendererLabel(Component leadingComponent, Component trailingComponent)
{
GroupLayout layout = new GroupLayout(this);
setLayout(layout);
layout.setHorizontalGroup(layout.createSequentialGroup()
.addComponent(leadingComponent, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(trailingComponent));
layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(leadingComponent)
.addComponent(trailingComponent));
}
}
}
我想知道是否有正确的方法来使用这部分 API。我特意扩展了 JRendererLabel
以防出现问题,但它似乎更微妙......
最佳答案
如果您查看JRendererLabel
,您将看到invalidate
、revalidate
、validate
(以及一堆其他方法)已被设置为“无操作”,这意味着它们不再向布局管理器发出应该布局组件的通知。这样做是为了帮助提高将渲染器“标记”到组件(JXList
)上的性能。
相反,请使用从 JPanel
扩展 FixedSecondColumnRendererLabel
。
您应该考虑对其进行优化,以便返回相同的实例,而不是每次调用该方法时都创建 FixedSecondColumnRendererLabel
和 JRendererLabel
的新实例。每次调用该方法时都会进行配置。
请记住,此方法会为 JXList
中的每一行调用,您拥有的越多,调用它的次数就越多,它创建的短命对象就越多...
关于java - 如何使用 SwingX 的荧光笔返回不同的渲染器组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27239771/
我正在尝试创建一个在 GUI 其余部分左侧打开的面板。我在 Eclipse 工作。我将 swingx-core-1.6.2.jar 添加到我的构建路径中。我可以导入 org.jdesktop.swin
这个问题不太可能对任何 future 的访客有帮助;它只与一个小的地理区域、一个特定的时间或一个非常狭窄的情况相关,通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visit the h
我正在尝试将自动完成功能添加到我当前的代码中,所以经过无数次我决定尝试 SwingX。 代码可以编译,可以工作,但是我仍然有一些“小”问题。 这是我的代码: public class GuiHandl
我有 MyTable,它是 JXTable 的扩展: public class MyTable extends JXTable{...} 按预期工作正常。现在我想让 DefaultColumnCont
我注意到 SwingX 的 Highlighter 接口(interface)允许荧光笔返回与传入的组件不同的组件。我实际上找不到任何使用此组件的示例,但我想我会尝试用它来创建某种假的第二列。 预期的
我正在尝试为 JXTreeTable 的树列设置自定义树单元格编辑器,但由于某种原因,我的编辑器从未被调用。 这是应该设置编辑器的位: dataTable.setDefaultEditor(DataE
我想突出显示 org.jdesktop.swingx.JXTreeTable 中相对于内部值的单元格,如“突出显示(扩展)”下的 SwingX 展示中所示: 展示中提供了一些代码,但我无法让它工作,它
我想个性化 JXDatePicker。更具体地说,我想在自己的位置上创建自己的操作按钮。我试图提取包含的 JButton,但是当我尝试将它添加到任何 JPanel 时,它只会添加空白空间。 JXDat
这个问题不太可能帮助任何 future 的访客;它仅与一个小地理区域、一个特定时刻或一个非常狭窄的情况相关,而这些情况通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visit the
本文整理了Java中org.jdesktop.swingx.util.WindowUtils类的一些代码示例,展示了WindowUtils类的具体用法。这些代码示例主要来源于Github/Stacko
我正在尝试使用 swingx 库来使用支持排序的 JXList。 我正在使用 API documentation 中提供的排序方法但还是不行。 这是一个完整的(测试)示例,我希望 A、B 和 C 按升
当我尝试从 JTreeTable 中删除选定的节点时,出现了一个奇怪的错误。首先,我从 JXtreeTable 的主类中获取选定的行 table.getSelectedRow() 我使用此方法执行此操
如何使用 swingx 中的 JComboBox(严格或非严格)?有人可以发布一个简单的示例或教程吗? http://swingx.java.net/ 最佳答案 您的问题是: “如何将 SwingX
我尝试了 swingx 框架 (http://swingx.java.net/) 的演示。当您关闭主窗口时,您会看到一个很好的淡入淡出效果。我试图用 JXFrame 达到这种效果,但它只有正常的关闭效
有谁知道是否可以使用 swingx 的 jxdatepicker 选择多天?我使用的是 swingx 版本 1.6.1(看起来是最新的)。 最佳答案 看起来 JXMonthView 类中有已弃用的方法
我想在 JTextPane 中实现搜索功能。我已经在使用 swingx,我看到了 Searchable 界面,其中有一个 JXEditorPane.DocumentSearchable。我想它是用于
我正在测试 SwingX AutoCompleteDecorator,我使用的代码是这样的: import javax.swing.text.JTextComponent; import javax.
我在 Netbeans IDE 中安装 SwingX 时遇到问题。我想玩 JXPanel 和相关组件,但我无法获得正确的库并让它继续运行。 我试图下载 swingx.jar,但互联网上没有可用的有效链
我在使用 SwingX 组件时遇到了一点问题。 在我的应用程序中,我使用了一个 JXTable,并在表格上注册了一个 MouseOver ColorHighlighter。表的模型定义了两列;一个字符
我正在尝试使用 SwingX 中的 MultiSplitPane 和 MultiSplitLayout。我知道如何将 MultiSplitLayout 与方法 parseModel 一起使用(参见 h
我是一名优秀的程序员,十分优秀!