Java JTable、JTextArea或JEditorPane突出显示代码行? 更新:
通过添加以下代码,我在这个答案中找到了部分解决方案:Java JTable、JTextArea或JEditorPane突出显示代码行? 更新:,java,swing,jtable,jtextcomponent,Java,Swing,Jtable,Jtextcomponent,通过添加以下代码,我在这个答案中找到了部分解决方案: class CustomRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component c =
class CustomRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
c.setBackground(new java.awt.Color(255, 72, 72));
return c;
}
}
然后将其传递给我的JTable对象:
jTable2.setDefaultRenderer(String.class, new CustomRenderer());
此操作正常,现在表格行显示为红色:
我现在唯一需要知道的是如何将着色限制为一行和一个单元格。
在进一步研究之后,我需要一个setCellRender()
方法,这样我就可以在特定单元格上设置自定义渲染,但是这个方法不存在
问题: 我想创建一个分步伪代码执行的可视化组件 为此,我创建了一个JTable,现在我正在寻找高亮显示每一行(或单元格,因为只有一列)的方法,以显示正在执行的行 我在下面的最终GUI中加入了一个模型。正如您在伪代码面板中看到的,我突出显示了最后一行 请忽略箭头,它们与问题没有严格的关系。 我已经开始在Netbeans Matisse中实现模型(这是三种算法中的一种)。但是,我不知道如何突出显示JTable组件中的单行
代码行1
使用不同类型的组件会更容易吗
稍后,我还需要能够重新着色各个单元,如模型的表格JPanel中所示。如何实现这一点
1)用于支持样式化文本,有三种选择
- 使用荧光灯
- 使用
格式化文本(当前格式的Java6)支持一个小代码以帮助您,如何在JTextPane上突出显示具有所需背景的特定文本文本:Html
以下是输出:import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.text.AttributeSet; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; import javax.swing.text.StyleContext; public class TextPaneTest extends JFrame { private JPanel topPanel; private JTextPane tPane; public TextPaneTest() { topPanel = new JPanel(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); EmptyBorder eb = new EmptyBorder(new Insets(10, 10, 10, 10)); tPane = new JTextPane(); tPane.setBorder(eb); //tPane.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY)); tPane.setMargin(new Insets(5, 5, 5, 5)); topPanel.add(tPane); appendToPane(tPane, "My Name is Too Good.\n", Color.RED, Color.YELLOW); appendToPane(tPane, "I wish I could be ONE of THE BEST on ", Color.BLUE, Color.WHITE); appendToPane(tPane, "Stack", Color.PINK, Color.WHITE); appendToPane(tPane, "Over", Color.YELLOW, Color.RED.brighter()); appendToPane(tPane, "flow", Color.BLACK, Color.GREEN.darker()); getContentPane().add(topPanel); pack(); setVisible(true); } private void appendToPane(JTextPane tp, String msg, Color c, Color bColor) { StyleContext sc = StyleContext.getDefaultStyleContext(); AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c); aset = sc.addAttribute(aset, StyleConstants.Background, bColor); // aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c); aset = sc.addAttribute(aset, StyleConstants.FontFamily, "Lucida Console"); aset = sc.addAttribute(aset, StyleConstants.Alignment, StyleConstants.ALIGN_JUSTIFIED); int len = tp.getDocument().getLength(); tp.setCaretPosition(len); tp.setCharacterAttributes(aset, false); tp.replaceSelection(msg); } public static void main(String... args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new TextPaneTest(); } }); } }
只需在第1点中添加一个选项,您还可以使用自己的视图创建自己的
,这是一项更大的工作,但通常优于其他options@stryba感谢您的通知,对于所有EditorKit或HtmlEditorKit相关问题,hmmm有我们的(JTextComponent's King@StanislavL),-1代表2)(是时候开始对这个不太正确的建议进行调查了:-)这不是在应用程序代码中实现可视单元格装饰的一般方法,而是自定义渲染器。基本规则是:永远不要为应用程序需求扩展JSomething,它们应该按原样使用。也就是说:使用附加功能扩展核心组件(在此上下文中,f.i.添加api以允许自定义条带化)很好:这允许在所有应用程序中重复使用扩展组件,而无需进一步扩展,他们可以根据需要配置自定义组件。这个答案和上面的注释让我有点困惑。我假设我应该在自定义类中扩展JTable并覆盖编辑器IT
method。我还应该承认,我对Java Swing没有很好的经验。1)也许最好等待@kleopatra的回复,2)这条评论是关于prepareRenderer()
的,并确保基本上她的诚实是真实的,而且非常有价值,如果你对Swing有所了解,3)我必须注意,如果不使用a编辑您的问题,就不可能回答您的问题。4)我仅将此问题作为面试,谢谢您的回答。虽然这解决了我在传递期望值
计算区域中遇到的另一个问题,但它仍然没有解决我在给JTable单元格着色时遇到的问题。@Ash:Ahhh。。。希望我能在
s上帮助你,但我对它们的了解太少了。对此我很抱歉。但是希望这个答案能在你的努力中对你有所帮助,希望你能很快找到答案:-)我可以在特定的单元格上设置自定义渲染-不,这不是你需要的:-)取而代之,您需要一个自定义渲染器,该渲染器根据传递到GetXXCellRenderComponent的参数决定其渲染组件的视觉效果,请参见f.i.i.see。因此,我将自定义渲染器设置为所有单元格,然后检查自定义渲染器方法中需要高亮显示的单元格?我仍然不知道如何在自定义渲染器方法中检查我所在的单元格。我不理解您不理解的内容;-)该方法的参数告诉您需要知道的一切。您确实阅读了我上面链接的教程,不是吗?如果我在我的JTable
method-gettableCellRenderComponent
If(column==0&&row==1)c.setBackground(new java.awt.Color(255,72,72))中执行条件语句代码>它仍然将所有单元格涂成红色。