Java 重写JTextField中的绘制方法以绘制文本
我希望通过覆盖paint方法在Java 重写JTextField中的绘制方法以绘制文本,java,swing,graphics,jtextfield,Java,Swing,Graphics,Jtextfield,我希望通过覆盖paint方法在JTextField上绘制一个数字。这样,当用户编辑文本字段时,数字不会消失。然而,目前,这个数字根本没有出现,我尝试过: public void paintComponent(Graphics g) { super.paintComponent(g); if(number != 0){ g.setColor(Color.RED); g.drawString(String.valueOf(num
JTextField
上绘制一个数字。这样,当用户编辑文本字段时,数字不会消失。然而,目前,这个数字根本没有出现,我尝试过:
public void paintComponent(Graphics g) {
super.paintComponent(g);
if(number != 0){
g.setColor(Color.RED);
g.drawString(String.valueOf(number),0,0);
}
}
任何想法,这可能吗?也许没有理由重写
paintComponent()
,而不是使用
JTextField.setBackground()
JTextField.set前台()
JTextField.setFont()
JTextField.setHorizontalAlignment(javax.swing.SwingConstants.LEFT)
- 有些黑客可能会将
彩色或特殊格式的文本放在那里Html
- 在
Document/DocumentListener
带有JFormattedTextField
数字格式化程序
paintComponent()
JTextField.setBackground()
JTextField.set前台()
JTextField.setFont()
JTextField.setHorizontalAlignment(javax.swing.SwingConstants.LEFT)
- 有些黑客可能会将
Html
彩色或特殊格式的文本放在那里
编辑
也许这个问题是关于
- 在
Document/DocumentListener
或
JFormattedTextField
带有数字格式化程序
为什么不在
JTextField
的前面添加一个小的JLabel
?JLabel
可能包含数字,因为它不可编辑,所以无论用户在JTextField
中做了什么更改,它都将始终存在。您还可以通过调用setForeground(Color.red)来格式化JLabel
,使其变为红色代码>。这可能是一个更简单的解决方案
例如,与其这样做
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);
这会在JTextField
的左侧添加一个红色的JLabel
,由于您正在为JPanel
使用BorderLayout
,因此它会自动使JLabel
尽可能最小。为什么不在JTextField
前面添加一个小的JLabel
?JLabel
可能包含数字,因为它不可编辑,所以无论用户在JTextField
中做了什么更改,它都将始终存在。您还可以通过调用setForeground(Color.red)来格式化JLabel
,使其变为红色代码>。这可能是一个更简单的解决方案
例如,与其这样做
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);
它在JTextField
的左侧添加了一个红色的JLabel
,并且因为您正在为JPanel
使用BorderLayout
,因此它会自动使JLabel
尽可能最小。尝试在g.drawString(String.valueOf(number),0,0)代码>呼叫。例如,使用getHeight()/2
尝试在g.drawString(String.valueOf(number),0,0)中使用Y位置代码>呼叫。例如,使用getHeight()/2
…当用户编辑文本字段时,数字不会消失
正如@mKorbel所指出的,为了获得红色数字,不需要重写JTextField
,只需使用公共方法对其进行配置即可。奥托
g.drawString(String.valueOf(number),0,0);
如果这真的是关于数字的,也许最好的方法是将a与a一起使用,并设置一个自定义
…当用户编辑文本字段时,数字不会消失
正如@mKorbel所指出的,为了获得红色数字,不需要重写JTextField
,只需使用公共方法对其进行配置即可。奥托
g.drawString(String.valueOf(number),0,0);
如果这真的是关于数字的,也许最好的方法是将a与a一起使用,并设置一个自定义值。在我看到“将Html格式的文本放在那里”之前,我就准备投票,在像JTextField
;这样的纯文本组件中,这看起来不是很好。)是否有机会编辑、澄清?@Andrew Thompson完成了,但没有明确说明您的评论,如果您希望从-->到插入符号、输入掩码、文档等高亮显示positions,则可能会有一个答案。我只是指支持(HTML)格式文本的组件,如JEditorPane
。。我实际上认为用例需要一个配置好的文本字段+1,(现在)前4分。@Andrew Thompson最初我想回答,但我需要检查一下以前是否睡过觉,呵呵,以相反的形式:-)FanClub(不屑一顾的)Peh。看看脚本是否会自动检测并删除这19张否决票将是一件有趣的事情在我看到“将Html格式的文本放在那里”之前,我正准备投票表决,这在像JTextField
;这样的纯文本组件中看起来不是很好是否有机会编辑、澄清?@Andrew Thompson完成了,但没有明确说明您的评论,如果您希望从-->到插入符号、输入掩码、文档等高亮显示positions,则可能会有一个答案。我只是指支持(HTML)格式文本的组件,如JEditorPane
。。我实际上认为用例需要一个配置好的文本字段+1,(现在)前4分。@Andrew Thompson最初我想回答,但我需要检查一下以前是否睡过觉,呵呵,以相反的形式:-)FanClub(不屑一顾的)Peh。看看脚本是否会自动检测并删除这19张否决票将是一件有趣的事情对不起,澄清一下,我的意思是说,而不是艾丁