本文介紹了從左邊剪下JLabel的文本的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
默認情況下,如果文本太長而不能完全按如下方式顯示,JLabel
會用3個點截斷右側的文本:
(圖像來自我正在開發的一個小型備份應用程序)。如您所見,”取消”按鈕上方的最后一個JLabel
按鈕在右側被切斷。此行為顯然是不可取的,因為文本中較相關的部分被切斷。
我希望生成的標簽在此圖像中看起來像(右欄,表示分辨率不佳):
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語言:
<html>
<body>
<p style="width:300px;overflow-x:hidden;direction:rtl">
kladsjhglakjsjdghlekfalksjdvhlkjdsnkljhsdlkvjhasdkjhfslkdjhcksdjhvflkasjvhlkajdlkajvsdhvlkjsadhaaaaaaaaaaaaa
</p>
</body>
</html>
雖然這只是在我的瀏覽器中以它應該的方式工作,但Swing似乎不支持足夠的樣式屬性集來支持此行為。
編寫自己的實現來滿足這樣做的要求應該不會太難。盡管如此,我想知道是否有實現這一目標的”搖擺方式”。
推薦答案
這不提供前導省略號(…),但至少它簡單而干凈。您可以將JLabel放在JViewport中,并始終將其滾動到末尾:
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));
}
});
這篇關于從左邊剪下JLabel的文本的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,