вставить JList в GridLayout - PullRequest
       47

вставить JList в GridLayout

0 голосов
/ 07 ноября 2019

У меня есть проблема, связанная с JList. Я получаю следующий макет.

JTextField | Button 1 | Button 2
Button 3   | Button 4 | Button 5

Это макет, который я получаю:

JTextField | Button 1 | Button 2
Button 3   | Button 4 | Button 5

Как видите, у меня нет JList между ними. Я попытался вставить туда компонент списка, но когда я это сделал, GridLayout нажал бы на список рядом с кнопкой 2. Я хочу, чтобы список был моим собственным между ними.

package ManyThings;

import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
javax.swing.JTextField;

public class test {

public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("GridLayout Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(1, 3));

    JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(3,1));
JTextField t1;
t1=new JTextField();
p1.add(new JTextField());             
p1.add(new JButton("Search"));
p1.add(new JButton("Clear"));
frame.add(p1);

JPanel p2 = new JPanel();
p2.setLayout(new GridLayout(1,3));
p2.add(new JButton("Add"));
p2.add(new JButton("Detail"));
p2.add(new JButton("Remove"));
frame.add(p2);

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

Ожидается следующая схема.

JTextField | Button 1 | Button 2
JList
Button 3   | Button 4 | Button 5

1 Ответ

1 голос
/ 07 ноября 2019

Составные макеты

Использование нескольких контейнеров с использованием различных менеджеров компоновки (при необходимости)

Compound layouts

import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class Test {

    public static void main(String args[]) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridLayout(3, 1));

            JPanel topRow = new JPanel(new GridLayout(1, 3));
            topRow.add(new JTextField(10));
            topRow.add(new JButton("Search"));
            topRow.add(new JButton("Clear"));

            add(topRow);
            add(new JScrollPane(new JList()));

            JPanel bottomRow = new JPanel(new GridLayout(1, 3));
            bottomRow.add(new JButton("Add"));
            bottomRow.add(new JButton("Detail"));
            bottomRow.add(new JButton("Remove"));

            add(bottomRow);
        }

    }
}

Разноеменеджеры по расположению

Используйте различные менеджеры по расположению, чтобы лучше соответствовать требованиям отдельных компонентов

Different layouts

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class Test {

    public static void main(String args[]) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridBagLayout());

            JPanel topRow = new JPanel(new GridLayout(1, 3));
            topRow.add(new JTextField(10));
            topRow.add(new JButton("Search"));
            topRow.add(new JButton("Clear"));

            JPanel bottomRow = new JPanel(new GridLayout(1, 3));
            bottomRow.add(new JButton("Add"));
            bottomRow.add(new JButton("Detail"));
            bottomRow.add(new JButton("Remove"));

            GridBagConstraints gbc = new GridBagConstraints();
            gbc.weightx = 1;
            gbc.fill = GridBagConstraints.HORIZONTAL;
            gbc.gridx = 0;
            gbc.gridy = 0;

            add(topRow, gbc);
            gbc.gridy = 2;
            add(bottomRow, gbc);

            gbc.gridy = 1;
            gbc.weighty = 1;
            gbc.fill = GridBagConstraints.BOTH;
            add(new JScrollPane(new JList()), gbc);

        }

    }
}

См. УкладкаКомпоненты внутри контейнера для более подробной информации

...