Java 试图将图标和字符串并排放置在JTextArea中
我试图在JavaSwing中动态地放置项目图标。例如,如果它有三个错误,我想在星体内部,在它旁边放一个数字和一个字符串。 像这样: 我试过一些方法,但似乎不可能 是否有人猜测这是否可能,或者如何做到 谢谢 我可以用例子来做。 但我只能在java外部创建带有数字的imageItem,然后迭代它们,使其与地图中的文本匹配Java 试图将图标和字符串并排放置在JTextArea中,java,swing,icons,jtextarea,Java,Swing,Icons,Jtextarea,我试图在JavaSwing中动态地放置项目图标。例如,如果它有三个错误,我想在星体内部,在它旁边放一个数字和一个字符串。 像这样: 我试过一些方法,但似乎不可能 是否有人猜测这是否可能,或者如何做到 谢谢 我可以用例子来做。 但我只能在java外部创建带有数字的imageItem,然后迭代它们,使其与地图中的文本匹配 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import jav
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.swing.BorderFactory;
import javax.swing.DefaultListCellRenderer;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Ex extends JFrame {
private static Map<String, ImageIcon> imageMap;
private static JScrollPane scrollPane;
private Color color_bg_azul = new Color(3, 109, 175);
private Color color_bg_oops = new Color(154, 210, 232);
private final Font f = new Font("Tahoma", Font.PLAIN, 18);
public static void main(String[] args) {
new Ex();
}
@SuppressWarnings({ "unchecked", "serial" })
public Ex() {
Container c = getContentPane();
ArrayList<String> nameList = new ArrayList<String>();
nameList.add("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor");
nameList.add("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do r");
nameList.add("Lorem ipsum dolor sit amet, consectetur adipiscing elit eiusmod tempor");
nameList.add("Lorem ipsum dolor sit amet, consectetur do eiusmod tempor");
nameList.add("Lorem dolor sit amet, consectetur do eiusmod tempor");
imageMap = createImageMap(nameList);
String[] a = new String[nameList.size()];
JList list = new JList(nameList.toArray(a)) {
@Override
public boolean getScrollableTracksViewportWidth() {
return true;
}
};
list.setBackground(color_bg_oops);
list.setCellRenderer(new ImgListRenderer());
ComponentListener l = new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
list.setFixedCellHeight(10);
list.setFixedCellHeight(-1);
}
};
list.addComponentListener(l);
scrollPane = new JScrollPane();
scrollPane.setViewportView(list);
c.add(scrollPane);
setSize(300, 300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private Map<String, ImageIcon> createImageMap(ArrayList<String> list) {
Map<String, ImageIcon> map = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
int aux = i+1;
map.put(list.get(i), new ImageIcon(
getClass().getResource("/imgs/" + "icon-06-item-"+aux+ ".png")));
}
return map;
}
public class ImgListRenderer extends DefaultListCellRenderer {
private JPanel p;
private JPanel iconPanel;
private JLabel lbl_icon;
private JTextArea ta;
public ImgListRenderer() {
p = new JPanel();
p.setLayout(new BorderLayout());
// icon
iconPanel = new JPanel(new BorderLayout());
iconPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10));
iconPanel.setBackground(color_bg_oops);
lbl_icon = new JLabel(); // <-- this will be an icon instead of a
// text
iconPanel.add(lbl_icon, BorderLayout.EAST);
p.add(iconPanel, BorderLayout.WEST);
// text
ta = new JTextArea();
ta.setLineWrap(true);
ta.setFont(f);
ta.setWrapStyleWord(true);
ta.setBackground(color_bg_oops);
ta.setForeground(color_bg_azul);
p.add(ta, BorderLayout.CENTER);
}
@SuppressWarnings("rawtypes")
@Override
public Component getListCellRendererComponent(final JList list,
final Object value, final int index, final boolean isSelected,
final boolean hasFocus) {
lbl_icon.setIcon(imageMap.get((String) value));
ta.setText((String) value);
int width = list.getWidth();
if (width > 0)
ta.setSize(width, Short.MAX_VALUE);
return p;
}
}
}
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.Container;
导入java.awt.Font;
导入java.awt.event.ComponentAdapter;
导入java.awt.event.ComponentEvent;
导入java.awt.event.ComponentListener;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.Map;
导入javax.swing.BorderFactory;
导入javax.swing.DefaultListCellRenderer;
导入javax.swing.ImageIcon;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JList;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTextArea;
公共类Ex扩展了JFrame{
私有静态地图;
私有静态JScrollPane滚动窗格;
私有颜色=新颜色(3,109,175);
私有颜色颜色=新颜色(154210232);
私有最终字体f=新字体(“Tahoma”,Font.PLAIN,18);
公共静态void main(字符串[]args){
新Ex();
}
@抑制警告({“未选中”、“串行”})
公共行政人员(){
容器c=getContentPane();
ArrayList nameList=新的ArrayList();
姓名列表。添加(“Lorem ipsum Door sit amet,Concetetur Adipising elit,sed do eiusmod Temporal”);
姓名列表。添加(“Lorem ipsum Door sit amet,Concertetur Adipising elit,sed do r”);
姓名列表。添加(“Lorem ipsum dolor sit amet,Concetetur Adipising elit eiusmod Temporal”);
姓名列表。添加(“Lorem ipsum Door sit amet,Concertetur do eiusmod Temporal”);
姓名列表。添加(“Lorem dolor sit amet,Concertetur do eiusmod tempor”);
imageMap=createImageMap(名称列表);
String[]a=新字符串[nameList.size()];
JList list=新JList(nameList.toArray(a)){
@凌驾
公共布尔值getScrollableTracksViewportWidth(){
返回true;
}
};
列表。挫折背景(彩色背景);
setCellRenderer(新的ImgListRenderer());
ComponentListener l=新的ComponentAdapter(){
@凌驾
公共无效组件已恢复(组件事件e){
列表。设置固定单元高度(10);
列表。设置固定单元高度(-1);
}
};
list.addComponentListener(l);
scrollPane=新的JScrollPane();
scrollPane.setViewportView(列表);
c、 添加(滚动窗格);
设置大小(300300);
setVisible(真);
setDefaultCloseOperation(关闭时退出);
}
私有映射createImageMap(ArrayList列表){
Map Map=newhashmap();
对于(int i=0;i
我知道这不是最好的方法,但对我来说很有效。希望有帮助 到目前为止你试过什么?让我们看看!这与jTextarea有什么关系?
jTextarea
不会这样做,JTextPane
或JEditorPane
可以,但您最好使用JList
甚至一系列JLabel