gpt4 book ai didi

java - 包含 JTextAreas 的 JList 显示 JTextAreas 的 toString() 而不是 JTextArea

转载 作者:行者123 更新时间:2023-12-02 05:12:16 26 4
gpt4 key购买 nike

我正在使用 JList,并且尝试对单元格使用 JTextAreas(实现 ListCellRenderer)。它不起作用。这些单元格仅显示 ListCellRenderer.toString() 而不是实际的 JTextArea。有人可以帮忙吗?谢谢。


DefaultListModel listModel = new DefaultListModel();
JList list = new JList(listModel);
add(list);

class ButtonListener implements ActionListener() {
public void actionPerformed(ActionEvent e){
listModel.clear();
for (String s : stringArray) {
listModel.addElement(new Listm(s));
}
}
}

class Listm extends JTextArea implements ListCellRenderer {
protected Listm(String text) {
setText(text); //Outputting the text element displays the desired String
}

public Component getListCellRendererComponent(JList list, Object object, int number, boolean bool, boolean bool2) {
setPreferredSize(new Dimension(x, y));
return this;
}
}
}

最佳答案

您应该只发布可编译的代码,并且您的代码有点困惑。您不应将文本传递到渲染器的构造函数中,因为该构造函数将用于渲染列表中所有项目的单个渲染器(除非您希望所有项目都使用相同的代码)。您不应忽略传递到 getListCellRendererComponent 方法中的 Object 参数,因为这是渲染器项显示的数据。例如:

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

public class MyGui extends JPanel {
public static final String[] DATA = {"One\n1", "Two\n2", "Three\n3"};
private DefaultListModel listModel = new DefaultListModel();
private JList list = new JList(listModel);

public MyGui() {
list.setCellRenderer(new Listm(3, 30));
add(new JScrollPane(list));
for (String datum : DATA) {
listModel.addElement(datum);
}
}

private class Listm extends JTextArea implements ListCellRenderer {
protected Listm(int rows, int cols) {
super(rows, cols);
setBorder(BorderFactory.createLineBorder(Color.blue));
}

public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
setText(value.toString());
if (cellHasFocus) {
setBackground(FOCUSED_COLOR);
} else if (isSelected) {
setBackground(SELECTED_COLOR);
} else {
setBackground(null);
}
return this;
}
}

private static void createAndShowUI() {
JFrame frame = new JFrame("MyGui");
frame.getContentPane().add(new MyGui());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}

关于java - 包含 JTextAreas 的 JList 显示 JTextAreas 的 toString() 而不是 JTextArea,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6802295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com