gpt4 book ai didi

java - 如何创建一个JComboBox,其每个元素都有两种不同的样式?

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

我正在使用 Swing 创建一个 Java 应用程序。它包含一个 JTextField 和一个 JComboBox,其中包含最后输入的单词以及输入这些单词的时间。带有时间的字符串应采用与最后输入的单词相同的另一种大小和颜色(较小且浅灰色)(标准样式)。所以在JComboBox的每个元素中应该使用两种不同的样式。我怎样才能做到这一点?

最佳答案

这是一个例子:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.util.Date;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class ComboSample implements Runnable {

public static void main(String[] args) {
SwingUtilities.invokeLater(new ComboSample());
}

@Override
public void run() {
JFrame frm = new JFrame("Combo example");
final JTextField fld = new JTextField(20);
TextData[] data = new TextData[]{new TextData("First", new Date(System.currentTimeMillis() - 100000)),
new TextData("Second", new Date(System.currentTimeMillis() - 200000)),
new TextData("Third", new Date(System.currentTimeMillis() - 300000)),
new TextData("Fourth", new Date(System.currentTimeMillis() - 400000))};
JComboBox<TextData> cb = new JComboBox<>(data);
cb.setSelectedItem(null);
cb.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
JComboBox cb = (JComboBox) e.getSource();
TextData td = (TextData) cb.getSelectedItem();
if (td != null) {
fld.setText(td.getText());
}
}
});
frm.add(fld);
frm.add(cb, BorderLayout.EAST);
frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frm.pack();
frm.setLocationRelativeTo(null);
frm.setVisible(true);
}

private static class TextData {
private static final DateFormat FORMAT = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
private final String text;
private final Date timestamp;
public TextData(String text, Date timestamp) {
this.text = text;
this.timestamp = timestamp;
}
public String getText() {
return text;
}
@Override
public String toString() {
return "<html>" + text + " <span style=\"color:#D3D3D3\"><i>" + FORMAT.format(timestamp) + "</i></span></html>";
}
}
}

关于java - 如何创建一个JComboBox,其每个元素都有两种不同的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43609047/

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