jscrollpane
グループ レイアウトの jpanel に5 つのリスト ( で囲まれています) を追加しました。リストの問題は、スクロールバーが自動的に表示されると、下部/上部の境界線が消えることです (リスト 2、3、4)。最初/最後のリストと同じように、すべてのリストが同じ wrt 境界線に見えるようにするにはどうすればよいですか?
を使用してviewportborderを設定しようとしましsetViewPortBroder
たが、あまり変わりません。2、3、4 は薄い境界線で表示され、残りのリストは二重の境界線で表示されます。
編集
コードサンプルの追加:
表示される各リストは、次のコードを使用して作成されます。
MyJList jList = new MyJList(value);
jList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jList.setModel(listModel);
jList.setMinimumSize(new Dimension(135, 300));
jList.setMaximumSize(new Dimension(135, 300));
jList.clearSelection();
jList.setSelectionBackground(Color.darkGray);
jList.setSelectionForeground(Color.white);
jList.setBorder(new LineBorder(Color.darkGray, 1));
jList.setFixedCellHeight(30);
jList.setFixedCellWidth(100);
Font font = jList.getFont();
jList.addListSelectionListener(new ListListener());
return jList;
MyList は JList の拡張です。ドメイン関連のメタデータを保存する以外は、特別なことは何もしません。そして、次のようにリストが中央のパネルに追加されます。
private void layoutLists(JLabel[] labels, JList[] lists) {
panel.removeAll();
panel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.NONE;
JScrollPane[] jScrollPanes = new JScrollPane[lists.length];
for (int index = 0; index < lists.length; index++) {
jScrollPanes[index] = new JScrollPane(lists[index]);
jScrollPanes[index].setBorder(BorderFactory.createEmptyBorder());
jScrollPanes[index].setMinimumSize(new Dimension(135, 300));
jScrollPanes[index].setMaximumSize(new Dimension(135, 300));
jScrollPanes[index].setPreferredSize(new Dimension(135, 300));
}
for (int index = 0; index < labels.length; index++) {
gbc.gridx = index;
gbc.gridy = 0;
gbc.insets = new Insets(8, 8, 8, 8);
panel.add(labels[index], gbc);
gbc.gridy = 1;
if (index == labels.length - 1) {
gbc.insets = new Insets(8, 8, 8, 13);
}
panel.add(jScrollPanes[index], gbc);
}}