6

アップデート:

次のコードを追加すること、この回答に部分的な解決策を見つけました。

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を作成しました。現在、各行(または列が1つしかないためセル)を強調表示して、実行されている行を表示する方法を探しています。

以下のモックアップを最終的なGUIに含めました。擬似コードパネルでわかるように、最後の行を強調表示しました。

質問に厳密に関連していない矢印は無視してください。

ワイヤーフレーム

Netbeans Matisseでモックアップの実装を開始しました(これは3つのアルゴリズムのうちの1つです)。code line 1ただし、JTableコンポーネントの1行を強調表示する方法がわかりません。

別の種類のコンポーネントを使用する方が簡単でしょうか?

後で、モックアップの表JPanelに示されているように、個々のセルの色を変更できるようにする必要もあります。これはどのように実装できますか?

部分的な実装

4

2 に答える 2

3

1)スタイル付きテキストをサポートするためにJTextPaneを使用します。3つの選択肢があります

  • 使用するHighLighter

  • Htmlフォーマットされたテキストを使用する(<=Html3.2をサポートし、cssのサポートを減らした現在の形式のJava6、確かにと比較してHtml5

  • 両方のamオプションを組み合わせる

  • 独自のEditorKitまたはHtmlEditorKitを作成します(@strybaに感謝)

2)JTableprepareRenderer()の場合、実装するのではなく、目的の値を渡しますgetTableCellRendererComponent()

3) JSliderの値が(別のJComponentsから)変更可能である場合は、BoundedRangeModel

于 2012-03-06T21:31:41.577 に答える
2

あなたの助けのための小さなコード、JTextPaneで希望の背景を持つ特定のテキストリテラルを強調表示する方法:

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();
                }
            });
    }
}

出力は次のとおりです。

JTEXTPANEテキストの強調表示

于 2012-03-07T04:58:30.710 に答える