4

ボタンにパラメーターとその値を表示するためにhtml ラベルを使用しています。パラメータが 1 つだけのボタンもあれば、2 つまたは 3 つのパラメータを持つボタンもあります。" / "は、値を区切るために使用されます。名前と値の間に空の行があります。しかし、長い値の場合、その空行を使用して、「テーブル H/V」ボタンのように値を表示したいと考えています。

値文字列の長さを使用して、空行が必要かどうかを判断しようとしています。文字数がその文字列の描画長を反映していないため、正しく機能しません。ボタンのサイズは固定です。

その空の行を表す "< br>" がもう 1 つ必要な時期をどのように知ることができますか? または、値の文字列がいつ別の行に折り返されるかをどのように知ることができますか?

これは私のコードです:

 private static String getBtnDisplayStr(String name, String value)
    {
        StringBuilder sBuilder = new StringBuilder();
        sBuilder.append("<html><center><b>");
        sBuilder.append(name);
        if(value.length() <= 12)  //add one empty line for short value string
        {
            sBuilder.append("</center></b><br><br><font size=\"2\">");
        }
        else
        {
            sBuilder.append("</center></b><br><font size=\"2\">");
        }
        sBuilder.append(value);
        sBuilder.append("</font></html>");

        return sBuilder.toString();
    }

ここにボタンがあります: ここに画像の説明を入力

4

2 に答える 2

3
  • デフォルトでは、 と を計算する理由はありませPreferredSizeHtml <=3.2Swing JComponents

  • LayoutManagerたとえば、GridLayout は最大の要素から画面サイズを計算します。

ここに画像の説明を入力

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class HtmlAndJButton {

    final String buttonText = " Whatever words, <br> but nothing wise";
    final String buttonText1 = " Whatever words, <br> but nothing wise, "
            + "<br> plus 1st. line, ";
    final String buttonText2 = " Whatever words, <br> but nothing wise, "
            + "<br> plus 1st. line, <br> plus 2nd. line,";
    private JButton btn1 = new JButton("Toggle");
    private JButton button = new JButton(buttonText);
    private JButton button1 = new JButton("Toggle");
    private JButton button2 = new JButton("Toggle");

    public HtmlAndJButton() {
        btn1.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                button.setText("<html><font color=" + (button.isEnabled()
                        ? "blue" : "red") + ">" + buttonText + "</font></html>");
                button.setEnabled(!button.isEnabled());
                button1.setText("<html><font color=" + (button1.isEnabled()
                        ? "red" : "green") + ">" + buttonText1 + "</font></html>");
                button1.setEnabled(!button1.isEnabled());
                button2.setText("<html><font color=" + (button2.isEnabled()
                        ? "green" : "yellow") + ">" + buttonText2 + "</font></html>");
                button2.setEnabled(!button2.isEnabled());
            }
        });
        button.setText("<html><font color=red>" + buttonText + "</font></html>");
        button1.setText("<html><font color=green>" + buttonText1 + "</font></html>");
        button2.setText("<html><font color=yellow>" + buttonText2 + "</font></html>");
        JFrame f = new JFrame("ButtonTest");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new GridLayout(2, 2));
        f.add(button);
        f.add(button1);
        f.add(button2);
        f.add(btn1);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                HtmlAndJButton t = new HtmlAndJButton();
            }
        });
    }
}
于 2012-12-20T20:29:21.590 に答える
0

ボタンにテキストを設定してから、ボタンの「推奨幅」を調べます。大きすぎる場合は、それに応じてテキストを調整します。

上から2つのボタンを使用した例を次に示します。

private static int BUTTON_WIDTH = 90;  // Adjust this as necessary

public static void main(String[] args) {
    JFrame frame = new JFrame();
    JPanel pnl = new JPanel();

    JButton btn1 = new JButton(getBtnDisplayStr("Table H/V",null,"909.0 / 500.0"));
    if (btn1.getPreferredSize().width > BUTTON_WIDTH) {
        btn1.setText(getBtnDisplayStr("Table H/V", "909.0 /", "500.0"));
    }
    JButton btn2 = new JButton(getBtnDisplayStr("Acq/ISD",null,"1 / 1"));
    if (btn2.getPreferredSize().width > BUTTON_WIDTH) {
        btn2.setText(getBtnDisplayStr("Acq/ISD","1 /","1"));
    }

    pnl.add(btn1,BorderLayout.LINE_START);
    pnl.add(btn2,BorderLayout.LINE_END);

    frame.add(pnl);
    frame.pack();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

private static String getBtnDisplayStr(String name, String valueLine1, String valueLine2) {
    StringBuilder sBuilder = new StringBuilder();
    sBuilder.append("<html><center><b>");
    sBuilder.append(name);
    sBuilder.append("</b><br/>");
    if (valueLine1 != null) {
        sBuilder.append("<font size=\"2\">");
        sBuilder.append(valueLine1);
        sBuilder.append("</font>");
    }
    sBuilder.append("<br/>");
    if (valueLine2 != null) {
        sBuilder.append("<font size=\"2\">");
        sBuilder.append(valueLine2);
        sBuilder.append("</font>");
    }
    sBuilder.append("<br/>");

    sBuilder.append("</center></html>");

    return sBuilder.toString();
}
于 2012-12-20T20:03:36.470 に答える