1

我希望JTextField通过覆盖绘制方法在 a 上绘制一个数字。这样当用户编辑文本字段时,数字不会消失。但是,目前,该数字根本没有出现,我尝试过:

public void paintComponent(Graphics g) {  
     super.paintComponent(g);
     if(number != 0){
            g.setColor(Color.RED);
            g.drawString(String.valueOf(number),0,0);
     }  
}  

任何想法,这甚至可能吗?

4

4 回答 4

3

尝试在g.drawString(String.valueOf(number),0,0);呼叫中使用 Y 位置。例如使用getHeight()/2

于 2012-04-23T13:55:05.627 回答
2

..当用户编辑文本字段时,数字不会消失。

正如@mKorbel 所指出的,无需重写 aJTextField即可获得红色数字,只需使用公共方法对其进行配置。哦..

g.drawString(String.valueOf(number),0,0);

如果这真的都是关于数字的,也许最好的方法是将 aJSpinner与 a 一起使用SpinnerNumberModel,并设置一个 custom SpinnerUI

于 2012-04-23T14:05:15.433 回答
1

你为什么不在前面加一个小JLabelJTextField?可以包含数字,并且因为它不可编辑,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尽可能小。

于 2012-04-23T13:43:26.673 回答
1

也许没有理由覆盖paintComponent()JTextField 而不是使用

  • JTextField.setBackground()

  • JTextField.setForeground()

  • JTextField.setFont()

  • JTextField.setHorizontalAlignment(javax.swing.SwingConstants.LEFT)

  • Html通过放置彩色或特殊格式的文本可以进行一些黑客攻击

编辑

也许这个问题是关于

  • KeyEvents在过滤Document / DocumentListener

或者

  • JFormattedTextFieldNumber Formatter
于 2012-04-23T13:41:26.233 回答