2

activityScrollPaneJPanel( )のJScrollPane()を含むSwingフォームがありますactivityPanel。パネルには、JTextFieldとJButton(パネルにフィールドを追加するために使用されます)が含まれています。ここで問題となるのは、下の画像のように要素がパネルの中心から始まることです(境界がactivityScrollPane境界を示しています) 。

ここに画像の説明を入力してください

以下は、スクロールペインと関連コンポーネントを作成するために現在使用しているコードです。

 //part of the code for creating the ScrollPane

        final JPanel activityPanel = new JPanel(new GridBagLayout());
        gbc.gridx=0;
        gbc.gridy=0;
        JScrollPane activityScrollPane = new JScrollPane(activityPanel); 
        //adding activity fields
        activityFields = new ArrayList<JTextField>();
        fieldIndex = 0;
        activityFields.add(new JTextField(30));

        final GridBagConstraints activityGBC = new GridBagConstraints();
        activityGBC.gridx=0;
        activityGBC.gridy=0;
        activityGBC.anchor = GridBagConstraints.FIRST_LINE_START;
        activityPanel.add(activityFields.get(fieldIndex),activityGBC);

        fieldIndex++;
        JButton btn_more = (new JButton("more"));
        activityGBC.gridx=1;
        activityPanel.add(btn_more,activityGBC);

JTextFieldとJButtonを作成するにはどうすればよいですか、さらに言えば、JScrollPaneの左上隅にコンポーネントを表示するにはどうすればよいですか。すでに使ってみました

activityConstraints.anchor = GridBagConstraints.NORTHWEST;

SOの投稿で指摘されているように、しかしそれはまったく機能していないようです。

4

5 に答える 5

3

値を指定するのを忘れただけweightx/weightyです。少なくとも 0 以外の値があれば十分です。このコード例を見てください:

import java.awt.*;
import javax.swing.*;
public class GridBagLayoutDemo
{
    private JTextField tfield1;
    private JButton button1;

    private void displayGUI()
    {
        JFrame frame = new JFrame("GridBagLayout Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new GridBagLayout());

        tfield1 = new JTextField(10);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.anchor = GridBagConstraints.FIRST_LINE_START;   
        gbc.weightx = 1.0;
        gbc.weighty = 1.0;  
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.fill = GridBagConstraints.HORIZONTAL;       
        contentPane.add(tfield1, gbc);

        button1 = new JButton("More");
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.fill = GridBagConstraints.NONE;
        contentPane.add(button1, gbc);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new GridBagLayoutDemo().displayGUI();
            }
        });
    }
}

最新の編集:Y軸に沿った間隔なし

import java.awt.*;
import javax.swing.*;
public class GridBagLayoutDemo
{
    private JTextField tfield1;
    private JButton button1;
    private JTextField tfield2;
    private JButton button2;

    private void displayGUI()
    {
        JFrame frame = new JFrame("GridBagLayout Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new GridBagLayout());

        tfield1 = new JTextField(10);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.anchor = GridBagConstraints.FIRST_LINE_START;   
        gbc.weightx = 1.0;
        //gbc.weighty = 0.2;    
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.fill = GridBagConstraints.HORIZONTAL;       
        contentPane.add(tfield1, gbc);

        button1 = new JButton("More");
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.fill = GridBagConstraints.NONE;
        contentPane.add(button1, gbc);

        tfield2 = new JTextField(10);
        gbc.weightx = 1.0;
        gbc.weighty = 0.2;  
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.fill = GridBagConstraints.HORIZONTAL;       
        contentPane.add(tfield2, gbc);

        button2 = new JButton("More");
        gbc.gridx = 1;
        gbc.gridy = 1;
        gbc.fill = GridBagConstraints.NONE;
        contentPane.add(button2, gbc);

        JScrollPane scroller = new JScrollPane(contentPane);

        frame.add(scroller);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new GridBagLayoutDemo().displayGUI();
            }
        });
    }
}
于 2012-05-22T09:54:51.733 に答える
2

BorderLayoutで試してからcontrols.setLayout(new BorderLayout());、JPanel に適用します。controls.add(yourPanel, BorderLayout.PAGE_START);

私も問題を抱えてGridBagLayoutいるので、それを解決しましたBorderLayout


だから私はあなたの小さな例のために書いた:

private void initComponents() {

        controls = new Container();
        controls = getContentPane();
        controls.setLayout(new BorderLayout());

        panel = new JPanel();
        panel.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();

        field = new JTextField(20);
        c.gridx = 0;
        c.gridy = 0;
        panel.add(field, c);

        one = new JButton("Go!");
        c.gridx = 1;
        c.gridy = 0;
        panel.add(one, c);

        controls.add(panel, BorderLayout.PAGE_START);

    }  

それが役に立てば幸い!

于 2012-05-22T09:31:18.077 に答える
2

申し訳ありませんが、私の回答はあなたが尋ねたことのオフサイドにありますが、GridBag Layout の代わりに GroupLayout を使用しないのはなぜですか。

于 2012-05-22T09:32:17.810 に答える
2

これは簡単で可能だと思います。

これにJPanel

  • GridLayoutに内容を入れJPanelsます(スクロールに関する注意、スクロールの増分を変更する必要があります)JComponent

または最も複雑JComponents

  • JListへの Item としての内容を入れJPanelsますJComponent

  • put JPanelscontainsJComponentを行としてJTableに入れます(1 つの列のみを指定し、 の有無にかかわらずTableHeader)

于 2012-05-22T09:43:13.113 に答える