2016-04-21 78 views
0

我寫過許多使用JOptionPane的項目,而且幾乎每次我都因爲無法將文本包裹在其中而感到沮喪。JOptionPane使用自定義Swing組件的文字環繞

我知道JOptionPane支持HTML,但總是似乎沒有做我想做的事情。首先,JOptionPane並不完全支持HTML - 例如,max-width屬性會非常棒。另一方面,<br /><p>標籤都不提供我真正需要的功能 - 一個JOptionPane,當消息很小時很小,當消息較大時可以增長,但不會變得太大,最終會分裂成一個新隊。

這使我想到我的問題。有沒有一些方法可以編寫我自己的自定義組件,可能從JFrame或類似的東西繼承,這將允許我模擬JOptionPane的效果,但它提供了對所顯示文本的更精細控制?這應該至少包括控制最大寬度和包裝文本的功能。

我還沒有通過搜索其他問題找到答案(也許答案是由所有答案,「使用HTML」)淹沒了。這不是這些問題的重複。

回答

4

Exmaple

import java.awt.Component; 
import javax.swing.JOptionPane; 
import javax.swing.JTextArea; 

public class OptionPaneUtilities { 

    public static void main(String[] args) { 
     OptionPaneUtilities.showMessage(null, "I sometimes I think we forget just how flexible the JOptionPane API is and what it can do. A little effort could go a long way"); 
    } 

    public static void showMessage(Component comp, String message) { 
     JTextArea ta = new JTextArea(message, 1, 20); 
     ta.setWrapStyleWord(true); 
     ta.setLineWrap(true); 
     ta.setOpaque(false); 
     ta.setBorder(null); 
     ta.setEditable(false); 
     ta.setFocusable(false); 
     JOptionPane.showMessageDialog(comp, ta); 
    } 

} 

現在,很明顯,這只是一個非常簡單的例子,你將不得不花費一些時間考慮如何以最佳方式這個概念應用到自己的API,因此滿足您的需求併爲您提供最大的靈活性。

你可以讓使用JEditorPane代替並獲得純文本和HTML與失去工作,以更多的努力

0

您是否在談論諸如添加換行符等選項框不顯示此長文本字符串?如果是這樣的:

JOptionPane.showMessageDialog(null, "This "\nmessage "\nhas "\nlinebreaks.")

應該足夠了。使用\ n(文本)創建換行符。希望這會有所幫助,祝你有個美好的夜晚。 :)

+0

感謝您的回答,但並沒有解決我的問題。我想要一個可重用且健壯的組件,並且一般可以處理我傳遞給它的任何類型的輸入。我希望能夠通過它「嗨」或整個段落,並仍然顯示乾淨。我不想通過放入一堆換行符來手動將其傳遞給每個文本。事實上,問題的關鍵在於避免這樣做。應該有一個組件爲我們做。 – nhouser9

+0

@ nhouser9如果我每次聽到有人這樣說都有一美元。 Swing API非常靈活,只需一點努力即可產生驚人的效果。例如,你知道'JOptionPane'的'message'參數是一個'Object',如果你傳遞一個基於Component的對象,它就被簡單地「添加」到'JOptionPane'中。想一想這一點 – MadProgrammer