我希望通过覆盖paint方法在JTextField
上绘制一个数字。因此,当用户编辑文本字段时,该数字不会消失。但是,目前这个数字根本没有出现,我试过了:
public void paintComponent(Graphics g) {
super.paintComponent(g);
if(number != 0){
g.setColor(Color.RED);
g.drawString(String.valueOf(number),0,0);
}
}
任何想法,这甚至可能吗?
答案 0 :(得分:3)
尝试在g.drawString(String.valueOf(number),0,0);
来电中使用Y位置。例如。使用getHeight()/2
答案 1 :(得分:2)
..当用户编辑文本字段时,数字不会消失。
正如@mKorbel所指出的,没有必要覆盖JTextField
以获取红色数字,只需使用公共方法进行配置即可。 OTOH ..
g.drawString(String.valueOf(number),0,0);
如果这完全是关于数字的,那么最好的方法可能是JSpinner
使用SpinnerNumberModel
,并设置自定义SpinnerUI
。
答案 2 :(得分:1)
也许没有理由覆盖JTextField的paintComponent()
,而不是使用
JTextField.setBackground()
JTextField.setForeground()
JTextField.setFont()
JTextField.setHorizontalAlignment(javax.swing.SwingConstants.LEFT)
通过放置Html
彩色或特殊格式的文字可以实现一些黑客攻击
编辑
也许这个问题是关于
KeyEvents
Document / DocumentListener
或
JFormattedTextField
与Number Formatter
答案 3 :(得分:1)
为什么不在JLabel
的前面添加一个小JTextField
? JLabel
可以包含该号码,因为它不可编辑,所以无论用户在JTextField
中发生什么变化,它都会一直存在。您也可以通过调用JLabel
来格式化setForeground(Color.RED);
以使其变为红色。这可能是一个更简单的解决方案吗?
例如,而不是这样做......
JPanel panel = new JPanel(new BorderLayout());
JTextField textfield = new JTextField("Hello");
panel.add(textfield,BorderLayout.CENTER);
你可能会做这样的事情......
JPanel panel = new JPanel(new BorderLayout());
JTextField textfield = new JTextField("Hello");
panel.add(textfield,BorderLayout.CENTER);
JLabel label = new JLabel("1.");
label.setForeground(Color.RED);
panel.add(label,BorderLayout.WEST);
在JLabel
左侧添加了红色JTextField
,并且由于您BorderLayout
使用JPanel
,它会自动生成JLabel
1}}它可能是最小的。