0

シンプルな Java スイング プログラムを作成していますが、コンポーネントのサイズと位置に問題があります。3 つの Jlabels と 3 つの JtextFields があります。jlabels が重複しているため、最後に追加したラベルのみが表示されます。テキストフィールドが非常に小さく表示されています (ほとんど線のように見えます)。

コード:

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class setCustoms {
static JPanel panel = new JPanel();
static JFrame frame2 = new JFrame("Settings");

public static void makeWindow(){
    frame2.setVisible(true);
    frame2.add(panel);
    frame2.setBounds(500, 300, 500, 200);

    JLabel app1l = new JLabel("");
    JLabel app2l = new JLabel("");
    JLabel app3l = new JLabel("");
    JLabel site1l = new JLabel("");
    JLabel site2l = new JLabel("");
    JLabel site3l = new JLabel("");

    panel.add(app1l);
    app1l.setText("Set  Application ONE name and path");
    JTextField app1t = new JTextField();
    app1t.setBounds(100, 100, 100, 25);
    app1t.addActionListener(new Action());
    panel.add(app1t);

    panel.add(app2l);
    app1l.setText("Set  Application TWO name and path");
    JTextField app2t = new JTextField();
    app2t.addActionListener(new Action());
    panel.add(app2t);


    panel.add(app3l);
    app1l.setText("Set  Application THREE name and path");
    JTextField app3t = new JTextField();
    app3t.addActionListener(new Action());
    panel.add(app3t);

}
static class Action implements ActionListener{
    public void actionPerformed (ActionEvent e){


    }
}

}

編集:特定のアイテムの境界を設定するコードがありますが、機能しません

4

3 に答える 3

0
  • すべてが 1 行に表示され、各コンポーネントを 1 行に表示したいと思います。

MadProgrammer が指摘したように、 のレイアウト マネージャーを設定していないため、要素は 1 行に表示されますpanelPedro Vítor の提案に従って、グリッド レイアウトを使用できます。たとえば、単一列のレイアウトの場合、次のことができます。

static JPanel panel = new JPanel (new GridLayout (0,1));

whereは行が0ないことを示し、 は列1の数です。

  • jlabelsが重複しています

コードを詳しく見てください。実際に起こっていることは、app1l常にテキストのみを設定していることです。他のラベルはそこにあります。テキストがないだけです。おそらくコピー&ペーストの産物です;)

  • 実践上の注意

Pedro Vítor が述べたように、要素を順番に追加する習慣を身に付ける必要があります。コードに戻るときの頭痛の種から解放されます。さらに、すべてのコンポーネントを追加した後にのみ、フレームを表示することをお勧めします。そうしないと、これらのコンポーネントがすべてレンダリングされることが保証されません。この質問を見てください:コンポーネントを追加する前に setVisible(true) を呼び出さないのはなぜですか?

したがって、すべてを考慮すると、コードは次のようになります。

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class setCustoms {
static JPanel panel = new JPanel(new GridLayout(0,1));
static JFrame frame2 = new JFrame("Settings");

public static void main (String[] args){
    JLabel app1l = new JLabel("");
    JLabel app2l = new JLabel("");
    JLabel app3l = new JLabel("");

    app1l.setText("Set  Application ONE name and path");
    panel.add(app1l);
    JTextField app1t = new JTextField();
    app1t.setBounds(100, 100, 100, 25);
    app1t.addActionListener(new Action());
    panel.add(app1t);

    app2l.setText("Set  Application TWO name and path");
    panel.add(app2l);
    JTextField app2t = new JTextField();
    app2t.addActionListener(new Action());
    panel.add(app2t);

    app3l.setText("Set  Application THREE name and path");
    panel.add(app3l);
    JTextField app3t = new JTextField();
    app3t.addActionListener(new Action());
    panel.add(app3t);

    frame2.add(panel);
    frame2.setBounds(500, 300, 500, 200);
    frame2.setVisible(true);   
}

static class Action implements ActionListener{
    public void actionPerformed (ActionEvent e){


    }
}

}

それが役立つことを願っています。

于 2013-11-09T01:15:51.790 に答える