我正在使用
let base64Encoded = "YW55IGNhcm5hbCBwbGVhc3VyZS4="
let decodedData = Data(base64Encoded: base64Encoded)!
let decodedString = String(data: decodedData, encoding: .utf8)!
print(decodedString)
println(decodedString)
将((JLabel)comboBox.getRenderer()).setHorizontalAlignment(SwingConstants.CENTER);
中的文字项目居中。
但我也希望在JComboBox
被禁用时(即文本外观不应/几乎没有变化),文本会清晰显示。
通过解决方案是使用ComboBox
(请参阅下面的详细信息),当我使用comboBox.setEditable(true)
时效果很好,除了它将文本对齐到左边。似乎解决这个问题需要做很多工作。
我想知道是否有人可以建议另一种方式在禁用的comboBox.setVisible(false)
中清楚地显示文字?
非常感谢。
修改:我用于改进禁用文字显示的完整代码是
comboBox
编辑2 :
以下是一个完整的例子:
ComboBoxEditor editor = comboBox.getEditor();
JTextField etf = (JTextField) editor.getEditorComponent();
etf.setDisabledTextColor(UIManager.getColor("ComboBox.foreground"));
etf.setBackground(UIManager.getColor("ComboBox.background"));
comboBox.setEnabled(false);
comboBox.setEditable(true);
编辑3 :它现在正在工作,但文本稍微向上移动,单击按钮时将删除comboBox边框。有办法防止这种情况吗?
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class GUITest extends JPanel {
static JFrame frame;
static JButton changeButton;
static JComboBox exampleComboBox;
public GUITest() {
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
String[] examples = {
"abcd",
"efgh",
"ij"
};
exampleComboBox = new JComboBox(examples);
// centre text of items in combo box
((JLabel) exampleComboBox.getRenderer()).setHorizontalAlignment(SwingConstants.CENTER);
JLabel buttonLabel = new JLabel("Click to make combo box disabled but text show clearly",
JLabel.LEADING); //== LEFT
JPanel patternPanel = new JPanel();
patternPanel.setLayout(new BoxLayout(patternPanel,
BoxLayout.PAGE_AXIS));
exampleComboBox.setAlignmentX(Component.LEFT_ALIGNMENT);
patternPanel.add(exampleComboBox);
JPanel resultPanel = new JPanel(new GridLayout(0, 1));
resultPanel.add(buttonLabel);
changeButton = new JButton();
resultPanel.add(changeButton);
addButtonListener();
patternPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
resultPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
add(patternPanel);
add(Box.createRigidArea(new Dimension(0, 10)));
add(resultPanel);
setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
} //constructor
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("ComboBoxDemo2");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JComponent newContentPane = new GUITest();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
private static void addButtonListener() {
changeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ComboBoxEditor editor = exampleComboBox.getEditor();
JTextField etf = (JTextField) editor.getEditorComponent();
etf.setDisabledTextColor(UIManager.getColor("ComboBox.foreground"));
etf.setBackground(UIManager.getColor("ComboBox.background"));
exampleComboBox.setEnabled(false);
exampleComboBox.setEditable(true);
}
});
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
答案 0 :(得分:1)
禁用组合框时无需使用编辑器。只需禁用组合框即可。所以ActionListener中的代码是:
changeButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
exampleComboBox.setEnabled(false);
//exampleComboBox.setEditable(true);
}
});
然后在课程的顶部你可以使用:
UIManager.put("ComboBox.disabledForeground", Color.BLACK);
查看禁用组合框使用的前景色。禁用组合框时,不显示编辑器,因此正常渲染完成。
因此,您不需要使用JTextPane作为编辑器。