标签: listcellrenderer

Swing JList具有多行文本和动态高度

我已经阅读/试过这些帖子,但这没有帮助:

我需要的是一个ListCellRenderer返回左侧带有图标的面板和右侧的动态长度文本(如在任何论坛中:左侧是用户头像,右侧是帖子文本).这些文本为我所知,所以我无法设置固定的单元格高度.此外,文本长度不同于列表单元格到列表单元格.因此,每个列表单元格都需要自己的高度,具体取决于文本的长度.实际上是一个非常常见的布局...但不适用于Swing.单元格高度不会根据文本长度扩展.

我已经阅读了几乎所有有关动态单元格高度和多行文本的帖子JList,但找不到解决方案.所以我决定给一个小型的SSCCE.请告诉我如何实现我所描述的内容,或者如果您认为这很容易,请修改我的代码.

谢谢

这是SSCCE:

public class MultiLineList extends JFrame
{

    private static final long serialVersionUID = 1L;

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

    private MultiLineList()
    {
        setTitle("MultiLineList");
        setSize(800, 450);
        setResizable(true);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.getContentPane().setLayout(new BorderLayout());

        final DefaultListModel model = new DefaultListModel();
        model.addElement("This is a short text");
        model.addElement("This is a long text. This is a long text. This is a long text. This is a long text. This …
Run Code Online (Sandbox Code Playgroud)

java swing expand jlist listcellrenderer

14
推荐指数
2
解决办法
1万
查看次数

Java JList设置项的颜色

你能帮帮我,如何改变JList中显示的项目颜色?

我正在创建一个用户JList,在那里我可以看到在线和离线用户,我需要离线用户拥有与在线用户不同的颜色.

我创建用户的代码

final String [] strings=database.getUsers(myLogin);  

jList1.setModel(new javax.swing.AbstractListModel() {
     @Override
     public int getSize() { return strings.length; }
     @Override
     public Object getElementAt(int i) { return strings[i]; }
});
Run Code Online (Sandbox Code Playgroud)

java swing jlist listcellrenderer

7
推荐指数
2
解决办法
1万
查看次数

CellRenderer项目重绘

我创建了自己的CellRenderer,其中包含几个字符串和一个JList项中的JProgressBar ...但是JProgressBar等整个JList项目将绘制一次,我正在寻找一种方法来重新绘制Items ...我试过了开始一个线程,这将永久重绘......但我不知道我需要重新绘制以获得结果...

JList重绘...没有结果CellRenderer重绘...没有结果JFrame重绘...没有结果

有谁理解我的问题并知道出路?

非常感谢你!

更新:[更新已删除]

下一步更新:

import java.awt.Component;
import java.awt.Dimension;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.ListCellRenderer;


public class Main extends JFrame{

public DefaultListModel contentListModel = new DefaultListModel();
public MyCellRenderer MCR = new MyCellRenderer();
public JList contentList = new JList(contentListModel);

public Main(){
    super("Example");
    setMinimumSize(new Dimension(300,300));
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    contentList.setCellRenderer(MCR);
    contentListModel.addElement("");
    contentListModel.addElement("");
    add(contentList);
}

public static void main(String[] args){
    new Main().setVisible(true);
}

class MyCellRenderer extends JPanel implements ListCellRenderer{

    public MyCellRenderer(){
        JProgressBar jpb = new JProgressBar();
        jpb.setIndeterminate(true); …
Run Code Online (Sandbox Code Playgroud)

java swing jlist jprogressbar listcellrenderer

5
推荐指数
1
解决办法
1523
查看次数

是否可以在JList中的一个JLabel上使用不同的字体颜色?

我的Jlist中有一个单词列表,旁边的每个单词都是他们的定义.我希望单词的字体具有与其定义不同的颜色.我的问题是,是否有可能在一个Jlist中有两种不同的颜色?

我必须使用ListCellRenderer吗?

谢谢...

java swing intellij-idea listcellrenderer

4
推荐指数
1
解决办法
7042
查看次数

自定义ListCellRenderer不会更改背景颜色

我有这门课:

 @SuppressWarnings("serial")
  private class DataCellRenderer extends JLabel implements ListCellRenderer 
  {
    public DataCellRenderer()
    {
      setHorizontalAlignment(SwingConstants.RIGHT); 
    }

    @Override
    public Component getListCellRendererComponent(
        JList list,
        Object value,
        int index,
        boolean isSelected,
        boolean cellHasFocus)
    {

      if(isSelected)
        setBackground(Color.red);

      setText("  " + value.toString());

      return this;
    }
  }
Run Code Online (Sandbox Code Playgroud)

问题是当我在JList中选择一个单元格时,我的背景不会变为红色.setText部分可以工作,但我无法弄清楚为什么它不会改变我的单元格的背景颜色.任何人有任何想法,谢谢!

java swing jlist listcellrenderer

4
推荐指数
2
解决办法
7049
查看次数

为 JComboBox 显示不可选择的默认值

我有一个JComboBox包含三个 Items {"Personel", "Magasinier", "Fournisseur"}

我希望它JComboBox显示 value "Choisir une option :",这是一个不可选择的值。

我在以下之后尝试了此代码initComponents();

this.jComboBox1.setSelectedItem("Choisir une option :");
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

我怎样才能做到这一点 ?

java swing prompt jcombobox listcellrenderer

4
推荐指数
1
解决办法
2万
查看次数

如何设置字体的颜色?

我有一个JList并在该列表中,我想更改以下单词的字体颜色.

有人说我必须使用CellRenderer,但我还不熟悉.

现在,我的问题是如何设置此渲染器来更改字体的颜色?

对此事有何想法?

谢谢...

java swing jlist listcellrenderer

2
推荐指数
2
解决办法
2358
查看次数

多个ListCellRenderer

是否可以在一个类中使用多个ListCellRenderer?

实际上我的应用程序中有多个JList,我需要为每个JList需要不同的ListCellRenderer.

我可以为实现ListCellRenderer的Component方法使用不同的类名.

例如:如果我有一个名为"MultiColumnCellRenderer"的类,其中包含一些Component方法的实现,另一个名为"MultiColumnCellRenderer2"的类,以及其他一些Component方法的实现?

public class MultiColumnCellRenderer extends JPanel implements
        ListCellRenderer {

    public MultiColumnCellRenderer() {
    }

    public Component getListCellRendererComponent(JList list, Object value,
            int index, boolean isSelected, boolean cellHasFocus) {

// Some implementation of Component Method

        super.setEnabled(list.isEnabled());
        super.setFont(list.getFont());

        return this;
    }
}


public class MultiColumnCellRenderer2 extends JPanel implements
        ListCellRenderer {

    public MultiColumnCellRenderer2() {
    }

    public Component getListCellRendererComponent(JList list, Object value,
            int index, boolean isSelected, boolean cellHasFocus) {

// Some implementation of Component Method

        super.setEnabled(list.isEnabled());
        super.setFont(list.getFont());

        return this;
    }
}`
Run Code Online (Sandbox Code Playgroud)

如果我做了类似的事情:

list1.setCellRenderer(new …
Run Code Online (Sandbox Code Playgroud)

java swing render jlist listcellrenderer

2
推荐指数
1
解决办法
1368
查看次数

如何更改JComboBox显示区域的外观

我正在为JComboBox使用自定义BasicComboBoxRenderer,并且我已经更改了下拉列表项的外观.但是,这些更改也适用于组合框中显示的单个顶部项目(不知道如何调用它).

如果可能的话,我希望顶部项目独立于列表中的其他项目.我还想在聚焦时摆脱顶级项目的蓝色(setFocusable(false)不是我想要的).

我试图使用"渲染器索引"(-1)来影响顶部项目,但它似乎没有帮助.

有任何想法吗?

PS不幸的是我无法添加图像更清晰(没有声誉).

编辑:当我说我希望顶部项目独立于下拉列表中的所有其他项目时,我的意思是总是看起来与其他项目不同.例如,在我的自定义BasicComboBoxRenderer中,我将所选项目设置为具有不同的背景,但此背景也适用于顶部项目(因为所选项目成为组合框的顶部项目).

编辑2:顶部项目=我的意思是组合框显示区域,所以我想影响显示区域显示的项目而不是下拉列表中的第一项.我设法通过在组合框本身和setFocusable(false)上使用setBackground来做到这一点(这不是很有用,因为我想保持焦点机制).但问题是(焦点问题除外)如果我通过自定义的BasicComboBoxRenderer或ListCellRenderer类在列表中的每个项目上设置边框,则在显示区域中显示的项目上会出现相同的边框.所以这里有两个问题:

- 有没有办法区分下拉列表中的项目布局和显示区域中的单个项目?

- 有没有办法在不禁用焦点机制的情况下禁用组合框的焦点颜色,就像我们在按钮上使用setFocusPainted(false)一样?(我还尝试在组合框中添加自定义FocusListener,但是通过focusGained()对背景进行的任何更改仅影响按钮而不影响显示区域中显示的项目.

很抱歉混乱和多次编辑......

java swing jcombobox listcellrenderer

2
推荐指数
1
解决办法
5061
查看次数

从JComboBox获取价值

我有JComboBox2列,我有JButton.单击时JButton,我需要分别JComboBox从第一列和第二列中获取所选值的结果...

我怎么这样?

另外:如何设置JComboBox的标头?

代码:

 public class Combo extends JFrame implements ActionListener{
    private JComboBox combo = new JComboBox();
    private JButton button = new JButton();
    public Combo() {

        setLayout(new FlowLayout());
        combo.setRenderer(new render());

        add(combo);

        combo.addItem(new String[] {"1","bbb"});
        combo.addItem(new String[] {"2","ff"});
        combo.addItem(new String[] {"3","gg"});
        combo.addItem(new String[] {"4","ee"});

        add(button);
        button.addActionListener(this);
        pack();
    }


    public static void main(String[]args){
        new Combo().setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==button){
            System.out.println(combo.getSelectedItem());
        }
    }
}
class render extends JPanel implements ListCellRenderer{

    private …
Run Code Online (Sandbox Code Playgroud)

java swing jbutton jcombobox listcellrenderer

2
推荐指数
1
解决办法
5万
查看次数