4

GridBagLayoutを使用して簡単なGUIを作成していますが、ほとんどすべてがうまくいきます。2つの列があり、左側はラベル用、右側はJTextAreaなどの他のウィジェット用です。最初の列を右に揃えます。 。

そこで、GridBagConstraints.NORTHEASTまたは.EASTに設定されたアンカー属性を試してみましたが、いずれも機能しません。

私のコードは次のとおりです。

private void createDataPanel() {
        data = new JPanel();
        data.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        data.setBorder(new TitledBorder("NOTAM proposal parameters"));

        c.gridx = 0;
        c.gridy = 0;
        c.insets = new Insets(5, 10, 5, 10);
        c.fill = GridBagConstraints.HORIZONTAL;
        data.add(new JLabel("Start time (DD-MM-YYYY HH:MM:SS):"), c);

        c.gridx++;
        long today = System.currentTimeMillis();
        startTimePicker = new JXDatePicker(new Date(today));
        startTimePicker.setFormats(dateFormatter);
        data.add(startTimePicker);

        c.gridx = 0;
        c.gridy++;
        c.anchor = GridBagConstraints.EAST;
        data.add(new JLabel("End time (DD-MM-YYYY HH:MM:SS):"), c);

        c.gridx++;
        c.anchor = GridBagConstraints.CENTER;
        long tomorrow = today + 86400000;
        endTimePicker = new JXDatePicker(new Date(tomorrow));
        endTimePicker.setFormats(dateFormatter);
        data.add(endTimePicker, c);

        c.gridx = 0;
        c.gridy++;
        c.anchor = GridBagConstraints.NORTHEAST;
        JPanel itemEPanel = new JPanel();
        itemEPanel.setLayout(new BoxLayout(itemEPanel, BoxLayout.Y_AXIS)); 
        itemEPanel.add(new JLabel("Item E:"));
        remainingChars = new JLabel(Integer.toString(availableChars) + " characters remaining");
        itemEPanel.add(remainingChars);
        data.add(itemEPanel, c);

        c.gridx++;
        c.anchor = GridBagConstraints.CENTER;
        itemEText = new JTextArea(8, 1);
        JScrollPane itemEScroll = new JScrollPane(itemEText);
        itemEText.setLineWrap(true);
        itemEText.setWrapStyleWord(true);
        itemEText.setBackground(Color.WHITE);
        itemEText.getDocument().addDocumentListener(new DocumentListener() {

            @Override
            public void removeUpdate(DocumentEvent e) {
                updateRemainingChars(e.getDocument());
            }

            @Override
            public void insertUpdate(DocumentEvent e) {
                updateRemainingChars(e.getDocument());
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                updateRemainingChars(e.getDocument());
            }

            public void updateRemainingChars(Document doc) {
                availableChars = maxItemECharacters - doc.getLength();
                if(availableChars>=0){
                    remainingChars.setText(Integer.toString(availableChars) + " characters remaining");
                    remainingChars.setForeground(Color.BLACK);
                    if(!okButton.isEnabled()) okButton.setEnabled(true);
                }
                else{
                    remainingChars.setText("Message too long: " + Integer.toString(availableChars));
                    remainingChars.setForeground(Color.RED);
                    if(okButton.isEnabled()) okButton.setEnabled(false);
                }
            }
        });
        data.add(itemEScroll, c);

        c.gridx = 0;
        c.gridy++;
        JPanel itemDPanel = new JPanel(new FlowLayout());
        applicable = new JCheckBox("Applicable");
        applicable.setSelected(true);
        applicable.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                itemDText.setEnabled(applicable.isSelected());
            }
        });
        itemDPanel.add(applicable);
        itemDPanel.add(new JLabel("Item D:"));
        data.add(itemDPanel, c);

        c.gridx++;
        itemDText = new JTextField();
        data.add(itemDText, c);
    }

それにもかかわらず、それは現在このように見えます: ここに画像の説明を入力してください

どうすればそれを正しく調整できますか?

4

5 に答える 5

7

GridBagConstraints.NORTHEAST または .EAST を設定しますが、fill=NONE を使用します

于 2012-06-22T09:00:04.263 に答える
5

JLabelのテキストを右側に配置したいということですか。はいの場合JLabel、このように sを初期化してみてください

JLabel someLabel = new JLabel("My Text will align towards RIGHT", JLabel.RIGHT);
于 2012-06-22T09:16:15.867 に答える
1
JLabel.setHorizontalTextPosition(JLabel.RIGHT);
于 2012-06-22T08:51:58.220 に答える
1

問題は、次の制約を使用することです。

c.fill = GridBagConstraints.HORIZONTAL;

したがって、すべてのコンポーネントは水平方向に引き伸ばされ、GridBagLayout の代わりにそれらに配置されます。

于 2012-06-22T09:03:59.523 に答える