Добавление кнопок J на ​​панель прокрутки - PullRequest
0 голосов
/ 05 июля 2018

JAVA:

Я хочу добавить несколько кнопок J в область прокрутки. Кнопки J - это чаты (как в Skype). Я хочу их в списке только с 1 столбцом. Количество групп / строк должно быть гибким. Размер кнопок должен быть все время одинаковым (300x50 или что-то в этом роде), а текст внутри кнопок должен быть выровнен по левому краю. Как мне этого добиться?

КОД:

class Chat extends JButton {

    private static final long serialVersionUID = 1L;
    public Group group;


    public Chat(Group group) {
        this.group = group;
        setMinimumSize(new Dimension(300, 50));

        setFocusPainted(false);
        setText(group.groupname);
        setFont(new Font("Tahoma", Font.PLAIN, 30));
        setForeground(Manager.dark);
        setBackground(blue);
        setBorder(new MatteBorder(0, 0, 1, 0, Manager.ct.getForeground()));
    }

}


public void initGroups() {
    int count = 0;
    for(Group group : groups) {
        if(group != null) {
            //TODO: ADD CHATS (GROUPS) TO SCROLLPANE
            count ++;
        }
    }

    if(count == 0) {
        System.out.println("No groups");
    }
}

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Начните с выделения необходимой вам функциональности. Начните с JPanel, GridBagLayout и некоторых кнопок ...

    setLayout(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridwidth = GridBagConstraints.REMAINDER;
    gbc.fill = GridBagConstraints.HORIZONTAL;

    for (int index = 0; index < 100; index++) {
        add(new JButton("Chat " + (index + 1)), gbc);
    }

Затем добавьте это к JScrollPane и добавьте это к основному контейнеру, возможно, с использованием BorderLayout

frame.add(new JScrollPane(new ChatListPane()), BorderLayout.LINE_START);

Возможно, вам также понадобится внедрить Scrollable interface, чтобы лучше контролировать размер JScrollPane, чтобы лучше удовлетворить ваши общие потребности. Хотя я использовал это здесь, оно тебе не всегда нужно ...

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Rectangle;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.Scrollable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

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

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new ChatPane());
                frame.add(new JScrollPane(new ChatListPane()), BorderLayout.LINE_START);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class ChatPane extends JPanel {

        public ChatPane() {
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

    }

    public class ChatListPane extends JPanel implements Scrollable {

        public ChatListPane() {
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.fill = GridBagConstraints.HORIZONTAL;

            for (int index = 0; index < 100; index++) {
                add(new JButton("Chat " + (index + 1)), gbc);
            }
        }

        @Override
        public Dimension getPreferredScrollableViewportSize() {
            return new Dimension(100, 100);
        }

        @Override
        public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
            return 64;
        }

        @Override
        public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
            return 64;
        }

        @Override
        public boolean getScrollableTracksViewportWidth() {
            return true;
        }

        @Override
        public boolean getScrollableTracksViewportHeight() {
            return false;
        }

    }

}

Другим и, возможно, лучшим решением будет использование JList и пользовательского ListCellRenderer.

См. Как использовать списки для получения более подробной информации

0 голосов
/ 05 июля 2018

Создайте новый JPanel, установите GridBadLayout или GridLayout и добавьте кнопки чата. Затем создайте JScrollPane с вашей новой панелью. Вы можете улучшить прокрутку (прокрутку мышью), реализуя Scrollable на своей JPanel.

...