Java swing: форматирование содержимого внутри диалога - PullRequest
0 голосов
/ 10 октября 2018

У меня возникают некоторые проблемы при попытке отформатировать расположения JComponent внутри диалога.Я чувствую, что это вопрос, на который уже есть ответ, но у меня были некоторые проблемы с поиском информации.

Я пытался использовать setLocation для элементов, используя пользовательский JOptionPane / JDialog (не уверен, правильно ли я это сделалхотя) но они всегда игнорируют форматирование позиций.и все элементы выходят в горизонтальную линию

enter image description here

В идеале я хотел бы, чтобы имена классов были вверху, 3 списка членов в середине икнопка внизу.Я создаю диалог следующим образом:

JPanel createClass = new NewClass();
int result = JOptionPane.showConfirmDialog(GUI.this, 
        createClass, "Create a class",JOptionPane.OK_CANCEL_OPTION);

, а NewClass () (расширяет JPanel) выглядит следующим образом:

//initializes the values
className = new JTextField(10);
superName = new JTextField(10);
publicMem = new DefaultListModel<String>();
protectedMem = new DefaultListModel<String>();
privateMem = new DefaultListModel<String>();
publicMem.addElement("Test");
publicMem.addElement("Test");
pubMemList = new JList(publicMem);
protMemList = new JList(protectedMem);
privMemList = new JList(privateMem);
pubMemList.setLocation(0,0);
newMember = new ButtonController(memberCommand);

//add Components to the JPanel
add(new JLabel("Class Name:"));
add(className);
add(Box.createHorizontalStrut(15));
add(new JLabel("Super Class Name:"));
add(superName);
add(new JLabel("\n"));
add(new JLabel("Public Members :"));
add(pubMemList);
add(new JLabel("Protected Members :"));
add(protMemList);
add(new JLabel("Private Members :"));
add(privMemList);
add(newMember);

Так что, если кто-нибудь может указать мне правильное направление илиеще один подобный пост, который был бы очень признателен.

1 Ответ

0 голосов
/ 10 октября 2018

"В идеале я хотел бы, чтобы имена классов были вверху, 3 списка членов в середине и кнопка внизу" Вы можете использовать BorderLayout для достижения этого.Следующий фрагмент может помочь вам начать:

    setLayout(new BorderLayout());

    //now add 3 panel as containers for top, center and bottom content
    JPanel top = new JPanel();
    add(top, BorderLayout.NORTH);
    JPanel center = new JPanel();
    add(center, BorderLayout.CENTER);
    JPanel bottom = new JPanel();
    add(bottom, BorderLayout.SOUTH);

    //manage layout and add content to top container
    top.setLayout(new FlowLayout());//actually it the default
    top.add(new JLabel("Class Name:"));
    JTextField className = new JTextField(10);
    top.add(className);
    top.add(new JLabel("Super Class Name:"));
    JTextField superName = new JTextField(10);
    top.add(superName);

    //todo manage layout and add content to center container
    //todo manage layout and add content to bottom container
...