3

次のコードを持つ JPanel があります。

JPanel pane = new JPanel();
pane.setLayout(new GridLayout(3, 2, 10, 30));
final JTextField fileName = new JTextField();
pane.add(fileName);
JButton creater = new JButton("Create File");
pane.add(creater);
JButton deleter = new JButton("Delete File");
pane.add(deleter);

JTextField が GridLayout で 2 つのスペースを占有するようにするにはどうすればよいでしょうか。2 つのボタンが同じ行でそれぞれ 1 つのスペースを占有して行を共有するようにするにはどうすればよいでしょうか。

4

4 に答える 4

2

GridLyout で行うのは難しいです。より広いセルを作成しました(たとえばnew GridLayout(2, 2, 10, 30)、TextFieldを最初のセルに追加します。次に、GridLayout(2、1)でさらに別のパネルを作成し、2行目のセルに入れ、ボタンをこの1番目のセルに追加する必要がありますネストされたグリッド レイアウト。

すぐに、GridLayout を他の GridLayout に追加する必要があります。

これを実装するためのより良いツールがあります。まず、GridBagLayout を見てください。人生が常にピックニックであるとは限らないことを確認するだけです:)。次に、MigLayout などの代替ソリューションを検討してください。これは JDK の一部ではありませんが、作業を楽にする非常に強力なツールです。

于 2011-02-10T13:59:26.633 に答える
1

サードパーティのレイアウトの提案を破棄した後、そして私は GBL に対する悪意のある憎悪を持っているため、公の精査 (および破棄) のために「自分のコードを私の口に置く」時が来たと考えました。

この SSCCE はネストされたレイアウトを使用します。

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

class SimpleLayoutTest {

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            public void run() {
                JPanel ui = new JPanel( new BorderLayout(20,20) );
                // I would go for an EmptyBorder here, but the filled
                // border is just to demonstrate where the border starts/ends
                ui.setBorder( new LineBorder(Color.RED,15) );

                // this should be a button that pops a JFileChooser, or perhaps
                // a JTree of the existing file system structure with a JButton
                // to prompt for the name of a new File.
                final JTextField fileName = new JTextField();
                ui.add(fileName, BorderLayout.NORTH);

                JPanel buttonPanel = new JPanel(new GridLayout(1, 0, 10, 30));
                ui.add(buttonPanel, BorderLayout.CENTER);

                JButton creater = new JButton("Create File");
                buttonPanel.add(creater);
                JButton deleter = new JButton("Delete File");
                buttonPanel.add(deleter);

                JOptionPane.showMessageDialog(null, ui);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}
于 2011-02-11T02:03:42.460 に答える
1

GridLayout で列スパンを行うことはできません。GridBagLayoutGridBagConstraintsを試すことをお勧めします

于 2011-02-10T13:56:36.697 に答える
0

GridBagLayout の使用方法に関するチュートリアルをご覧ください。

サンプルコード:

    JPanel pane = new JPanel();
    GridBagLayout gridbag  = new GridBagLayout();
    pane.setLayout(gridbag);
    GridBagConstraints c = new GridBagConstraints();

    final JTextField fileName = new JTextField();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridwidth = 2;
    c.gridx = 0;
    c.gridy = 0;
    pane.add(fileName, c);

    JButton creater = new JButton("Create File");
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridwidth = 1;
    c.gridx = 0;
    c.gridy = 1;
    pane.add(creater, c);

    JButton deleter = new JButton("Delete File");
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 1;
    pane.add(deleter, c);
于 2011-02-10T14:06:51.243 に答える