4

レコード店をシミュレートする簡単なGUIを作成しようとしています。私はまだ初期段階にあります。

ユーザーがテキストフィールドに入力する予定の内容を説明するテキストを追加しようとすると、問題が発生します。

さらに、すべてのテキストフィールドを独自の行に配置するのにも問題があります。つまり、1行に2つのテキストフィールド用のスペースがある場合、それは1行に表示され、すべてのテキストフィールドを独自の行に表示しようとしています。

これは私がこれまでに試したことです:

item2 = new JTextField("sample text");

ただし、上記のコードは、テキストフィールド内にデフォルトのテキストを追加するだけであり、これは私が必要とするものではありません:/

よろしくお願いします。

public class MyClass extends JFrame{
        private JTextField item1;
        private JTextField item2;

        public MyClass(){
            super("Matt's World of Music");
            setLayout(new FlowLayout());

            item1 = new JTextField();
            item2 = new JTextField();

            add(item1);
            add(item2);

            thehandler handler = new thehandler();

            item1.addActionListener(handler);
            item2.addActionListener(handler);   

        }

    }
4

4 に答える 4

5

最初の問題では、JLabelを使用してテキストを表示する必要があります。コンストラクターは次のようになります。

JLabel label = new JLabel("Your text here");

GUIで非常にうまく機能します。

独自の行で物事を取得することに関しては、GridLayoutをお勧めします。使いやすい。

コンストラクターでは、何かを追加する前に、次のことを行います。

setLayout(new GridLayout(rows,columns,x_spacing,y_spacing));

x_spacingy_spacingは両方とも、要素間の水平方向と垂直方向のスペースを決定する整数です。

次に、行ったように追加します。それをいじくり回すと、うまくいくでしょう。

したがって、ファイナルは次のようになります。

setLayout(new GridLayout(2,2,10,10));
add(new JLabel("Text 1"));
add(text1);
add(new JLabel("text 2"));
add(text2);
于 2012-08-26T22:37:06.497 に答える
3

JLabelを使用してテキストフィールドにラベルを付けることができます。

    JLabel label1 = new JLabel("Item 1: ");
    add(label1);
    add(item1);

フィールド内にテキストが本当に必要な場合は、コンストラクターを使用してフィールドにテキストを設定し、MouseListenerを追加して、クリックするとテキストをクリアできます。

    item1 = new JTextField("Text");
    item1.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            if (item1.getText().equals("Text")) // User has not entered text yet
                item1.setText("");
        }
    });

または、(おそらくより良い)FocusListenerを使用します:

    item1 = new JTextField("Text");
    item1.addFocusListener(new FocusListener() {
        public void focusGained(FocusEvent e) {
            if (item1.getText().equals("Text")) // User has not entered text yet
                item1.setText("");
        }
        public void focusLost(FocusEvent e) {
            if (item1.getText().equals("")) // User did not enter text
                item1.setText("Text");
        }
    });

レイアウトに関しては、別の行を強制するには、ボックスを使用します。

    Box itemBox = Box.createVerticalBox();
    itemBox.add(item1);
    itemBox.add(item2);
    add(itemBox);
于 2012-08-26T22:55:06.813 に答える
1

作る:

item1 = new JTextField(10);
item2 = new JTextField(10);

これで、JTextFieldの幅の問題が解決するはずです。まず、GridLayoutを使用してJTextFieldを1行で表示します。その後、MIGレイアウトhttp://www.migcalendar.com/miglayout/whitepaper.htmlを使用することを強くお勧めします。

JTextFieldの横にJLabelを配置して、ユーザーがテキストフィールドに入力する内容を記述します。

JLabel lbl = new JLabel("Description");

または、toolTipTextの使用を検討することもできます。

item1.setToolTipText("This is description");
于 2012-08-26T22:39:04.453 に答える
0

FormLayoutJava Swingでフォームを作成する場合は、フォームを作成するように設計されたJGoodiesを常にお勧めします。リンクにはサンプルコードスニペットが含まれています。これは、簡単なことを示すためにここにコピーして貼り付けました。

public JComponent buildContent() {
    FormLayout layout = new FormLayout(
            "$label, $label-component-gap, [100dlu, pref]",
            "p, $lg, p, $lg, p");

    PanelBuilder builder = new PanelBuilder(layout);
    builder.addLabel("&Title:",  CC.xy(1, 1));
    builder.add(titleField,      CC.xy(3, 1));
    builder.addLabel("&Author:", CC.xy(1, 3));
    builder.add(auhtorField,     CC.xy(3, 3));
    builder.addLabel("&Price:",  CC.xy(1, 5));
    builder.add(priceField,      CC.xy(3, 5));
    return builder.getPanel();
}

今説明のために:

  • テキストフィールドの前にラベルを使用して、非常に短い説明を付けます
  • @Aldenが提案するように、テキストフィールドに長い説明を入力できます。ただし、テキストフィールドが短い入力用の場合、誰も説明を読むことができません
  • ツールチップ(JComponent#setTooltipText)を使用して、より長い説明を入力できます。これらのツールチップは、いくつかのフォーマットを可能にする基本的なhtmlも受け入れます。ツールチップの欠点は、アプリケーションのユーザーがその機能を「発見」する必要があることです。これらの機能が利用可能であるという明確な兆候がないためです。
  • 各テキストフィールドの後に「ヘルプアイコン」(疑問符など)を配置できます(JButtonアイコンのみでを使用)。クリックすると、説明付きのダイアログが表示されます(JOptionPaneクラスを使用するなど) 。
  • 各フォームに1つの「ヘルプアイコン」を配置して、すべてのフィールドの説明を含むダイアログを表示できます。

ダイアログの提案に関する注意:私はそれをモデルのものにしません。ユーザーがダイアログを開いて、フォームへの入力が完了するまで開いたままにしておくことができます。

于 2012-08-27T07:27:50.833 に答える