2016-12-30 4 views
1

に右にテキストをJLabelカットをJLabelのテキストをオフにカットオフ私が取り組んでいる小さなバックアップアプリケーション)。あなたが最後にJLabelの上に表示されているように、 "キャンセル"ボタンが右に切り取られています。この動作は、テキストのより関連性の高い部分が切り捨てられているので、明らかに望ましくない。は、3個のドットでデフォルトで左

私は、得られたラベルは、この画像(右欄、悪い解像度のためのSRY)でのように見えるしたいと思います:
enter image description here

Source

これまでのところ、私は配置を変更しようとしましたJLabel.RIGHTにラベル内のテキストの、ComponentOrientation.RIGHT_TO_LEFTにコンポーネントの向きを変え、無駄にhorizontalTextPosition、すべてを設定します。

import javax.swing.*; 
import java.awt.*; 

public class Backup 
{ 
    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(()->{ 
      JLabel label = new JLabel("Some test text 1 2 3 4 5 6 7 8 9 10 abcdefghjiklmnopqrstuvwxyz", JLabel.RIGHT); 
      label.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
      label.setHorizontalTextPosition(JLabel.RIGHT); 

      JFrame frame = new JFrame(); 
      frame.add(label); 
      frame.pack(); 
      frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
      frame.setVisible(true); 
     }); 
    } 
} 
<html> 
    <body> 
     <p style="width:300px;overflow-x:hidden;direction:rtl"> 
      kladsjhglakjsjdghlekfalksjdvhlkjdsnkljhsdlkvjhasdkjhfslkdjhcksdjhvflkasjvhlkajdlkajvsdhvlkjsadhaaaaaaaaaaaaa 
     </p> 
    </body> 
</html> 

これは、それが私のブラウザでになっていた方法でだけで動作しますが、スイングがこれをサポートするために、スタイル・プロパティの十分なセットをサポートしていないようです:私はHTMLを使用して、同様に試してみた何動作。

正確にこれを行うという要件を満たす独自の実装をコーディングするのはあまり難しいことではありません。それにもかかわらず、私はこれを達成するための「スイング・ウェイ」があるかどうか疑問に思っていました。

+0

'私はこのimage'に似たラベルを見たいのですが - それは私が提案する何が起こっていたかでした。 「これを達成するための「スイング・ウェイ」があるかどうか疑問に思っていました」 - これは私が知っているわけではないので、カスタムレンダラーがJTable用に作られた理由です。そうでなければ、レンダラーとしてラベルを使用するときにスウィングの方法を使用していたでしょう:) – camickr

+0

@camickrまあ、私はちょうどいくつかのプロパティまたはそのようなものを設定して自分のレンダラーをコーディングする方法があることを期待したい。しかし、私はすでに、JLabelのドキュメントとコードの両方を調べた後、それを疑っていました。とにかく、ありがとう。 – Paul

答えて

1

これは省略記号(...)を提供しませんが、少なくともシンプルでクリーンです。あなたはJViewportの中でのJLabelを配置し、すべての回で、それは最後までスクロールしておくことができます。

JViewport viewport = new JViewport(); 
viewport.setView(label); 
viewport.addComponentListener(new ComponentAdapter() { 
    @Override 
    public void componentResized(ComponentEvent event) { 
     int width = viewport.getWidth(); 
     Dimension size = label.getPreferredSize(); 
     viewport.setViewPosition(new Point(size.width - width, 0)); 
    } 
}); 
+0

ありがとう、問題解決済み:) – Paul

0

それはあなたが必要なものである場合は、これを追加して見ることができます:

label.setHorizontalAlignment(SwingConstants.LEFT); 

ドキュメントで:

X軸に沿ったラベルの内容の配置を設定します

+0

助けにならない。ラベルの内容を左に揃えても、オーバーフロー処理の動作は変更されません。実際、私は整列として有効なすべての単一の値を試してきました。 – Paul

+0

これで、スニペットで期待した出力が左に揃えられています。 – ddarellis

+0

ポイントは、テキストを左に揃えるのではなく、テキストがコンポーネントの境界をオーバーフローする場合は、左に3ドットのテキストを切り取ることです。 – Paul

関連する問題