3

私のコードは正常に動作します (この Web サイトのおかげで!) が、1 つの詳細を忘れていました: パネルの境界線がありません。問題は、パネルにラベルを割り当てると、すべてのコンポーネントを囲むのではなく、非常に奇妙な形で表示されるということです。なぜそれが起こるのかは理解していますが、それを修正する方法と、必要なものを取得する方法がわかりません。必要なもの:

ここに画像の説明を入力

しかし、私が得るもの:

ここに画像の説明を入力

import javax.swing.*;
import javax.swing.border.TitledBorder;

import java.awt.event.*;
import java.awt.*;

public class HW2BorderLayoutSettings extends JFrame {
private JPanel buttonPanel = new JPanel();
private JPanel propertiesPanel = new JPanel();
private JLabel label1 = new JLabel();
private JLabel label2 = new JLabel();
private JButton north = new JButton("North");
private JButton south = new JButton("South");
private JButton west = new JButton("West");
private JButton east = new JButton("East");
private JButton center = new JButton("Center");
private BorderLayout border = new BorderLayout();
private JLabel label = new JLabel("BorderLayout Properties:");
private JLabel hGapLabel = new JLabel("HGap:");
private JLabel vGapLabel = new JLabel("VGap:");
private JTextField hGapField = new JTextField();
private JTextField vGapField = new JTextField();
private GridLayout grid = new GridLayout(2, 2);
private Integer hGapInt;
private Integer vGapInt;

public HW2BorderLayoutSettings() {
    buttonPanel.setLayout(border);
    buttonPanel.add(north, BorderLayout.NORTH);
    buttonPanel.add(center, BorderLayout.CENTER);
    buttonPanel.add(south, BorderLayout.SOUTH);
    buttonPanel.add(west, BorderLayout.WEST);
    buttonPanel.add(east, BorderLayout.EAST);
    propertiesPanel.setLayout(grid);
    propertiesPanel.add(hGapLabel);
    propertiesPanel.add(hGapField);
    propertiesPanel.add(vGapLabel);
    propertiesPanel.add(vGapField);

    add(buttonPanel, BorderLayout.CENTER);
    add(propertiesPanel, BorderLayout.SOUTH);
    buttonPanel.add(label1);
    propertiesPanel.add(label2);

    label1.setHorizontalAlignment(JLabel.LEFT);
    label2.setHorizontalAlignment(JLabel.LEFT);
    TitledBorder titled1 = new TitledBorder("Container");
    label1.setBorder(titled1);
    TitledBorder titled2 = new TitledBorder("Properties");
    label2.setBorder(titled2);


    hGapField.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            hGapInt = Integer.parseInt(hGapField.getText());
            border.setHgap(hGapInt);
            setSize((int) (getWidth() + hGapInt), getHeight());
            validate();
        }
    });

    vGapField.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            vGapInt = Integer.parseInt(vGapField.getText());
            border.setVgap(vGapInt);
            setSize(getWidth(), (int) (getHeight() + vGapInt));
            validate();
        }
    });
}

public static void main(String[] args) {
    HW2BorderLayoutSettings borderDemo = new HW2BorderLayoutSettings();
    borderDemo.setTitle("Border Layout");
    borderDemo.setSize(400, 400);
    borderDemo.setLocationRelativeTo(null);
    borderDemo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    borderDemo.setVisible(true);

}
}
4

1 に答える 1

2

ああ、気にしないでください、私はそのような単純なことを複雑にしていました! ラベルや新しいパネルは必要なく、既存のものに境界線を追加するだけで済みました!

TitledBorder titled1 = new TitledBorder("Container");
buttonPanel.setBorder(titled1);
TitledBorder titled2 = new TitledBorder("Properties");
propertiesPanel.setBorder(titled2);
于 2015-10-26T16:44:47.133 に答える