1

これは私を非常に怒らせています。私はこれに2日間取り組み、2冊の本を開いてそれらを調べましたが、それでもこのプログラムを希望どおりに実行することはできません。これが役に立たない場合、私はやめるところまで来ています。

SIMPLEFrameアプリケーションが必要です。上部の中央にJComboBoxがあります。その隣には、「$ 49.99」などの数字を表示するのに十分な大きさのテキストフィールドがあります。その下には、利用規約を表示するテキスト領域があります。その下には、利用規約に同意するチェックボックスがあります。その下には、2つのボタン「同意する」があります。と「辞退」

私はこれに2日間取り組んできました、ここにコーディングがあります:

public class Bar extends JFrame implements ActionListener
{
    public Bar(final JFrame frame)
    {
        String[] tests = { "A+ Certification", "Network+ Certification", "Security+ Certification", "CIT Full Test Package" };
        JButton button = new JButton("Click Meh");
        add(new JLabel("Welcome to the CIT Test Program "));
        add(new JLabel("Please select which Test Package from the list below."));
        frame.setVisible(true);
        frame.setSize(250,250);
        JPanel pane1 = new JPanel(new FlowLayout());
        JPanel pane2 = new JPanel(new FlowLayout());

        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenu helpMenu = new JMenu("Help");
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);
        JMenuItem newMenu = new JMenuItem("New  (Ctrl+N)");
        JMenuItem openMenu = new JMenuItem("Open  (Ctrl+O)");
        JMenuItem saveMenu = new JMenuItem("Save  (Ctrl+S)");
        saveMenu.addActionListener(this);
        JMenuItem exitMenu = new JMenuItem("Exit  (Ctrl+W)");
        JMenuItem cutMenu = new JMenuItem("Cut  (Ctrl+X)");
        JMenuItem copyMenu = new JMenuItem("Copy  (Ctrl+C)");
        JMenuItem pasteMenu = new JMenuItem("Paste  (Ctrl+V)");
        JMenuItem infoMenu = new JMenuItem("Help  (Ctrl+H)");
        fileMenu.add(newMenu);
        fileMenu.add(openMenu);
        fileMenu.add(saveMenu);
        fileMenu.add(exitMenu);
        editMenu.add(cutMenu);
        editMenu.add(copyMenu);
        editMenu.add(pasteMenu);
        helpMenu.add(infoMenu);
        frame.setJMenuBar(menuBar);
        JComboBox packageChoice =  new JComboBox(tests);
        frame.add(packageChoice);


    }

     public void actionPerformed(ActionEvent e)
  {
  Object source = e.getSource();
  {
  }

}

編集:2番目のプログラムを追加するのを忘れた

public class JFrameWithPanel
{
    public static void main(String[] args)
    {
         JPanel panel = new Bar(new JFrame("CIT Test Program"));
    }
}

これを取得して、必要な場所にすべてを表示するにはどうすればよいですか?私はこれのために非常に混乱していて、今ではフレームがどのように機能するかさえほとんど理解していません。

4

4 に答える 4

1

Swingのコンポーネントは、特定の順序で配置する必要があります。

JFrameから始めます。JFrameに配置されるコンポーネントは、JMenuBarとJPanelのみです。JFrameに他のコンポーネントを追加することはありません。JPanelにコンポーネントを追加します。

これがニックのコードで、コンポーネントを正しい順序で定義するために再編成されています。より高速だったのでGridLayoutを使用しました。Nivasが言ったように、GridBagLayoutを使用する必要があります。

public class Bar {

    private static final long serialVersionUID = 1L;

    public Bar(final JFrame frame) {
        JMenuBar menuBar = buildMenuBar();
        frame.setJMenuBar(menuBar);

        JPanel masterPanel = new JPanel(new GridLayout(2, 1));

        JPanel pane1 = new JPanel(new GridLayout(3, 1));
        pane1.add(new JLabel("Welcome to the CIT Test Program "));
        pane1.add(new JLabel("Please select which Test Package from the list below."));
        JButton button = new JButton("Click Me");
        pane1.add(button);

        JPanel pane2 = new JPanel(new GridLayout(1, 1));
        String[] tests = { "A+ Certification", "Network+ Certification",
                "Security+ Certification", "CIT Full Test Package" };
        JComboBox packageChoice = new JComboBox(tests);
        pane2.add(packageChoice);

        masterPanel.add(pane1);
        masterPanel.add(pane2);

        frame.add(masterPanel);
        frame.pack();

        frame.setVisible(true);
//      frame.setSize(250, 250);

    }

    public JMenuBar buildMenuBar() {
        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenu helpMenu = new JMenu("Help");
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);
        JMenuItem newMenu = new JMenuItem("New  (Ctrl+N)");
        JMenuItem openMenu = new JMenuItem("Open  (Ctrl+O)");
        JMenuItem saveMenu = new JMenuItem("Save  (Ctrl+S)");
        saveMenu.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub

            }
        });
        JMenuItem exitMenu = new JMenuItem("Exit  (Ctrl+W)");
        JMenuItem cutMenu = new JMenuItem("Cut  (Ctrl+X)");
        JMenuItem copyMenu = new JMenuItem("Copy  (Ctrl+C)");
        JMenuItem pasteMenu = new JMenuItem("Paste  (Ctrl+V)");
        JMenuItem infoMenu = new JMenuItem("Help  (Ctrl+H)");
        fileMenu.add(newMenu);
        fileMenu.add(openMenu);
        fileMenu.add(saveMenu);
        fileMenu.add(exitMenu);
        editMenu.add(cutMenu);
        editMenu.add(copyMenu);
        editMenu.add(pasteMenu);
        helpMenu.add(infoMenu);
        return menuBar;
    }
}

JMenuBarコードを独自のメソッドに移動したので、コードの残りの部分が理解しやすくなることを願っています。

他のすべてのコンポーネントが追加されているマスターJPanelがあります。

別のJPanelを使用して、2つのJLabelとJButtonを保持しました。

JComboBoxを保持するために3番目のJPanelを使用しました。

基本的なパターンは次のとおりです。

  • JPanelを定義します。
  • コンポーネントを定義します。
  • コンポーネントをJPanelに追加します。
  • JPanelをマスターJPanelに追加します
  • マスターJPanelをJFrameに追加します。
于 2010-06-17T14:39:22.420 に答える
1

ニック。あなたが最初にクリアしなければならないことは、あなたが何を望んでいるかを正確に知ることだと思います。

私はこの質問であなたを助けましたhttps://stackoverflow.com/questions/3055777/how-to -...

あなたが説明していることから、あなたはすでにあなたが必要としているものを持っています。これの何が問題になっていますか:

代替テキスト

ですから、それを手に入れるためには、あなたが望むものを明確に説明する必要があると私は本当に思います。

私たちはあなたを助けますが、あなたはあなたの問題が何であるかを明確に定義しなければなりません。

于 2010-06-17T14:12:25.150 に答える
0

1。2番目のプログラムはコンパイルされません。JFrameをJPanelに割り当てようとしています。

あるべきだった

 JFrame frame = new Bar(new JFrame("CIT Test Program")); 

2。できます。あなたが欲しいものはそこにあります。ただし、Javaにどのように表示するかを指示していないため、希望どおりではありません。GridBagLayoutのようなLayoutManagerを使用してみてください。

GUIの作成を急いでいる場合は、ドラッグアンドドロップで作業を簡単にするNetBeansなどのIDEを試してください。

編集:

例:

public class TestN extends JFrame
{
    private JLabel label ;
    private JComboBox combo;
    private JButton button;
    public TestN()
    {
        label = new JLabel("Label:");
        combo = new JComboBox();
        combo.addItem("Item 1");
        combo.addItem("Item 2");
        combo.addItem("Item 3");

        setLayout(new GridBagLayout());

        GridBagConstraints c1 = new GridBagConstraints();
        c1.gridx = 0;
        c1.gridy = 0;
        c1.weightx = 1;
        c1.weighty = 1;
        add(label, c1);

        GridBagConstraints c2 = new GridBagConstraints();
        c2.gridx = 1;
        c2.gridy = 0;
        c2.weightx = 1;
        c2.weighty = 1;
        add(combo, c2);

        button = new JButton("Ok");
        GridBagConstraints c3 = new GridBagConstraints();
        c3.gridx = 2;
        c3.gridy = 0;
        c3.weightx = 1;
        c3.weighty = 1;
        add(button, c3);

        setTitle("Test");
        setSize(200,100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args)
    {
        new TestN();
    }
}

免責事項:これは、例を示すための基本的な例です。本番コードではありません;-)

于 2010-06-17T14:06:26.540 に答える
0

あなたが持っている:

public class Bar extends JFrame implements ActionListener
{
    public Bar(final JFrame frame)
    {
        String[] tests = { "A+ Certification", "Network+ Certification", "Security+ Certification", "CIT Full Test Package" };
        JButton button = new JButton("Click Meh");
        add(new JLabel("Welcome to the CIT Test Program "));
        add(new JLabel("Please select which Test Package from the list below."));
        frame.setVisible(true);
        frame.setSize(250,250);

Barオブジェクトはから継承しますJFrame(つまり、BarオブジェクトのタイプですJFrame)が、コンストラクターで異なるJFrameオブジェクト(frameパラメーター)を渡します。次に、オブジェクトに対していくつかのメソッドを呼び出しますBar(2つのオブジェクトを追加するなど)。JLabelまた、渡されたメソッドに対して、およびメソッドJFrameなどを呼び出します。setVisiblesetSize

したがって、2つの異なるJFrameオブジェクトがあり、それぞれに対していくつかの作業を行い、そのうちの1つだけが表示されるように設定されています。

JFrameコンストラクターに渡す唯一の理由は、ウィンドウのタイトルを設定することであるように見えます。Stringタイトル付きのをコンストラクターに渡してから、コンストラクターの最初の行としてBar呼び出す場合は、渡されたものはまったく必要ありません。super(title);BarJFrame

于 2010-06-18T06:08:59.550 に答える