java - 多色列表

标签 java swing layout colors jlist

enter image description here

我必须连续创建 5 个 Jlist,使它们的背景看起来颜色不同。我现有的代码创建了这 5 个没有颜色的列表(默认 JList)。我知道我只能自定义 jlist 的内部/边框而不是它周围的边距/填充?还是我错了,有办法吗?

顺便说一句,列表上方的空间是一个 Jlabel(上图中未显示),使用的布局管理器是 GroupLayout 和 GridBagLayout。

更新

AT,根据您的建议,这里比较了列表被 jpanel 包围时的样子。后面的列表是 Jpanel 周围有大小为 1 的最小空边框的列表。

创建一个覆盖 preferredsize 的 JPanel 的问题是 jlists 在水平 jpanel 中,而在它们之上是另一个带有标签的 jpanel。因此,将 jlist 包装在 jpanel 中是行不通的。

enter image description here

最佳答案

请务必查看此代码示例。它是否更接近您想要的,否则您定义需要完成的更改。一收到您的回复,我就会立即联系他们 :-)

结果如下:

JLIST

import java.awt.*;
import javax.swing.*;

public class JListExample
{
    private JList<String> list1;
    private JList<String> list2;
    private JList<String> list3;
    private JList<String> list4;
    private JList<String> list5;
    private CustomPanel panel1;
    private CustomPanel panel2;
    private CustomPanel panel3;
    private CustomPanel panel4;
    private CustomPanel panel5;
    private String[] data = {"one", "two", "three", "four"};
    private int width = 110;
    private int height = 300;

    private void displayGUI()
    {
        JFrame frame = new JFrame("JList Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new GridLayout(0, 5, 2, 2));

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.weightx = 1.0;
        gbc.weighty = 0.9;

        panel1 = new CustomPanel(width, height, Color.GRAY, "List 1");
        list1 = new JList<String>(data);
        panel1.add(list1, gbc);
        panel2 = new CustomPanel(width, height, 
                 Color.GREEN.brighter().brighter(), "List 2");
        list2 = new JList<String>(data);         
        panel2.add(list2, gbc);
        panel3 = new CustomPanel(width, height, 
                          Color.ORANGE.brighter(), "List 3");
        list3 = new JList<String>(data);                  
        panel3.add(list3, gbc);
        panel4 = new CustomPanel(width, height, 
                            Color.BLUE.brighter(), "List 4");
        list4 = new JList<String>(data);                    
        panel4.add(list4, gbc);
        panel5 = new CustomPanel(width, height, Color.RED, "List 5");
        list5 = new JList<String>(data);
        panel5.add(list5, gbc);

        contentPane.add(panel1);
        contentPane.add(panel2);
        contentPane.add(panel3);
        contentPane.add(panel4);
        contentPane.add(panel5);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new JListExample().displayGUI();
            }
        });
    }
}

class CustomPanel extends JPanel
{
    private final int GAP = 5;
    private int width;
    private int height;
    private Color backgroundColour;
    private JLabel titleLabel;

    public CustomPanel(int w, int h, Color c, String title)
    {
        width = w;
        height = h;
        backgroundColour = c;
        titleLabel = new JLabel(title, JLabel.CENTER);
        setBackground(backgroundColour);
        setBorder(
            BorderFactory.createEmptyBorder(
                                GAP, GAP, GAP, GAP));                   
        setLayout(new GridBagLayout()); 
        titleLabel.setAlignmentX(JLabel.CENTER_ALIGNMENT);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.NONE;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weightx = 1.0;
        gbc.weighty = 0.1;
        add(titleLabel, gbc);
    }   

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

**最新编辑:**

正如@kleopatra 正确指出的(对我来说不是什么新鲜事:-)),判断力太好了。完成与以下相关的编辑:

import java.awt.*;
import javax.swing.*;

public class JListExample
{
    private final int GAP = 5;
    private JList<String> list1;
    private JList<String> list2;
    private JList<String> list3;
    private JList<String> list4;
    private JList<String> list5;
    private JPanel panel1;
    private JPanel panel2;
    private JPanel panel3;
    private JPanel panel4;
    private JPanel panel5;
    private String[] data = {"one", "two", "three", "four"};
    private int width = 110;
    private int height = 300;
    private GridBagConstraints gbc = new GridBagConstraints();

    private void displayGUI()
    {
        JFrame frame = new JFrame("JList Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new GridLayout(0, 5, 2, 2));      

        panel1 = getPanel(Color.GRAY, "List 1");
        list1 = new JList<String>(data);

        panel2 = getPanel(Color.GREEN.brighter().brighter(), "List 2");
        list2 = new JList<String>(data);         

        panel3 = getPanel(Color.ORANGE.brighter(), "List 3");
        list3 = new JList<String>(data);                  

        panel4 = getPanel(Color.BLUE.brighter(), "List 4");
        list4 = new JList<String>(data);                    

        panel5 = getPanel(Color.RED, "List 5");
        list5 = new JList<String>(data);        

        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.weightx = 1.0;
        gbc.weighty = 0.9;

        panel1.add(list1, gbc);
        panel2.add(list2, gbc);
        panel3.add(list3, gbc);
        panel4.add(list4, gbc);
        panel5.add(list5, gbc);

        contentPane.add(panel1);
        contentPane.add(panel2);
        contentPane.add(panel3);
        contentPane.add(panel4);
        contentPane.add(panel5);

        frame.setContentPane(contentPane);
        frame.setSize(610, 300);
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private JPanel getPanel(Color c, String title)
    {
        JPanel panel = new JPanel();
        panel.setOpaque(true);
        panel.setBorder(
            BorderFactory.createEmptyBorder(
                                GAP, GAP, GAP, GAP));       
        panel.setBackground(c);
        panel.setLayout(new GridBagLayout());   
        JLabel label = new JLabel(title, JLabel.CENTER);
        label.setAlignmentX(JLabel.CENTER_ALIGNMENT);

        gbc.fill = GridBagConstraints.NONE;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weightx = 1.0;
        gbc.weighty = 0.1;

        panel.add(label, gbc);

        return panel;
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new JListExample().displayGUI();
            }
        });
    }
}

关于java - 多色列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11963928/

相关文章:

java - 将 JTextField 布局为可包装 JLabel - 不受欢迎的行为

java - 我的executeUpdate() 工作,但未提交

java - 将 hibernate 从 3.2.4.sp1 升级到合适的版本

java - JPanel 不会添加 JLabel 文本?

JavaFX 中的 JavaBeanProperties,无需引入 java.desktop(Swing、AWT)

android - .xml 布局文件因 <EditText> 正文而无法正常工作

Java 具有随机颜色的弹跳球应用程序

java - 在 Java Swt 中显示图像?

java - java类之间的通信

html - 与子内联 block 元素一起使用时 float 不起作用