Начните с выделения необходимой вам функциональности. Начните с 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
.
См. Как использовать списки для получения более подробной информации