2016-03-20 9 views
2

性能上の理由から私はMatlabでuitableの古いバージョンを使用しています。私はテーブルヘッダーのセル境界線の色を変更しようとしています。現在のところ、2つの列のヘッダーセルは互いに区別できません。私は以下を試しました:テーブルヘッダーボーダー古いuitable matlab

テーブルの見出しの境界を変更することはできません。以下は動作するように見えますが、表のヘッダーセルではなく、ヘッダー全体を囲んでいます。

h_old=uitable('v0','data',magic(5),'position',[5,5,550,400]); 
set(h_old,'Units','normalized'); 
% get the underlying java table 
jtable=h_old.getTable; 
% get table header 
theader=jtable.getTableHeader; 
% set intended color 
color=java.awt.Color(9471874); 
% create a line border 
theaderborder=javax.swing.BorderFactory.createLineBorder(color); 
% set it in table header 
theader.setBorder(theaderborder); 

これは、ヘッダー全体の境界線を設定しますが、セルの境界線は設定しません。どのようにそれを行う方法を知っていますか?

jtableグリッド(表のセルの境界線)を変更するには、jtable.setGridColor(color)を使用できます。私は等価ですが、テーブルヘッダーセルを探しています。

おかげで、あなたはJavaのコーディングのほんの少しを行う必要があり アミット

答えて

2

DefaultTableCellRendererを拡張してカスタムセルレンダラーを実装する必要があります。 MatlabではインラインJavaコードを書くことができないので、このクラスをjarにパッケージし、javaパスに追加する必要があります。

あなたが必要とするクラスは、次のようなものになります。それはそう離れて境界線の色を設定することから、デフォルトの外観の一部を上書きし、あなたは一例としてなど、背景色をカスタマイズしたい場合がありますことを

public class CustomBorderCellRenderer extends DefaultTableCellRenderer { 
    private static final long serialVersionUID = 1L; 

    private Color borderColor; 

    public CustomBorderCellRenderer(Color borderColor) { 
     this.borderColor = borderColor; 
    } 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     JComponent component = (JComponent) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
     ((JLabel) component).setHorizontalAlignment(JLabel.CENTER); 
     component.setBorder(BorderFactory.createLineBorder(borderColor)); 
     return component; 
    } 
} 

注意を私はまた、左に表示されるはずのヘッダーラベルを中央に配置します。

あなたはjarファイルをパッケージ化し、ロードしたら、使用が簡単です。

javaaddpath('Path\to\YourJar.jar'); 
figure(); 
hTable = uitable('v0', 'data', magic(5), 'position', [5,5,550,400]); 
set(hTable, 'Units', 'normalized'); 
borderColor = java.awt.Color(1,0,0); 
renderer = CustomBorderCellRenderer(borderColor); 
header = hTable.getTable().getTableHeader(); 
header.setDefaultRenderer(renderer); 

あなたはまた、例えば、それ自体を再描画するために、テーブルをトリガする必要がある場合がありますdrawnowを使用してください。

enter image description here

+0

Thanks Nirvana。私は回避策がないと思います。私は、Javaプログラミングを避けようとしていました。そのことについては、プログラミングやプログラミングについての背景はありません。急な学習曲線があり、すでに作業を開始しています。 – Amit

+0

あまりにも急ではありません。しかし、Matlabではあなたのために無限のUI(そしてそれだけでなく)の可能性を開かれます。 jarをパッケージ化するには、Eclipseなどの無料のものを含め、任意のIDEでわずか数回のマウスクリックが必要です。そこには、それぞれのステップを説明するたくさんのドキュメントがあります。 –

+0

感謝の涅槃。私は瓶をパッケージするためにIntelliJを使用しています。しかし、私がMatlabでそれを使用するとき、それは '未定義関数または変数CustomBorderCellRenderer'を認識することができません。 jarファイルをパッケージ化するときに選択する必要がある主なクラスは何ですか? – Amit

関連する問題