是否有方法返回JTextField中字符的位置.我的意思是,如果我有一个带有一些值的JTextField.例如,该字段包含值ABCDEFJ.用户决定将光标放在字符"C"之后,以输入新值.有没有一种方法可以获得进入新角色的位置.在这个例子中,这将返回3.
我正在Java swing中编写一个Java桌面实用程序,其中包含一个最小的GUI部分,大部分工作都是在服务器端完成的,即后端.所以,我不想花很多时间在GUI部分,学习不同的控件和小部件.问题是,Swing有两个控制(对我来说)相同的任务,即下拉菜单,他们是JComboBox,JSpinner我不知道差异,我不希望任何限制,将阻碍我完成我的任务后,我选择一.
我将使用下拉显示List<String>从DataBase返回的显示,它可以有多达数千个值.为了防止用户滚动,我将把起始字母作为输入,或者有一些类别限制,所以,我可能会使用特定值来显示List<String>.我希望我的程序尽可能高效,并且在前端花费最少的时间,因为后端有很多操作.
任何帮助将受到高度赞赏
我有一个使用SpinnerDateModel的JSpinner,它的开头是2010年1月1日00:00:00.000结束日期是2010年1月1日00:12:34.217.我希望我的JSpinner.DateEditor使用格式HH:mm:ss.SSS但旋转器不会使用此格式旋转.只有在将"yyyy"添加到格式时才会旋转.我怎么能绕过这个?
import java.awt.GridLayout;
import java.util.*;
import javax.swing.*;
public class T extends JPanel {
public T() {
super(new GridLayout(2, 2));
init();
}
private void init() {
Calendar start = GregorianCalendar.getInstance();
Calendar end = GregorianCalendar.getInstance();
start.clear();
end.clear();
start.set(Calendar.YEAR, 2010);
end.set(Calendar.YEAR, 2010);
end.add(Calendar.HOUR_OF_DAY, 12);
SpinnerDateModel m1 =
new SpinnerDateModel(start.getTime(), start.getTime(),
end.getTime(), Calendar.MILLISECOND);
SpinnerDateModel m2 =
new SpinnerDateModel(start.getTime(), start.getTime(),
end.getTime(), Calendar.MILLISECOND);
JSpinner workingSpinner = new JSpinner(m1);
workingSpinner.setEditor(
new JSpinner.DateEditor(workingSpinner,
"yyyy HH:mm:ss.SSS"));
JSpinner notWorkingSpinner = new JSpinner(m2);
notWorkingSpinner.setEditor(
new JSpinner.DateEditor(notWorkingSpinner,
"HH:mm:ss.SSS"));
add(new JLabel("Working"));
add(workingSpinner);
add(new …Run Code Online (Sandbox Code Playgroud) 当我尝试通过键盘或鼠标使JSpinner不可编辑时,如下所示:
((DefaultEditor) mySpinner.getEditor()).getTextField().setEditable(false);
mySpinner.setEnabled(false);
Run Code Online (Sandbox Code Playgroud)
它禁用任何键盘输入和粘贴,但我仍然可以单击向上/向下按钮并更改值.
如何禁用向上/向下按钮?
我需要将JSpinner放在JOptionPane中.这是我尝试过的:
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
public static void main(String[] args) {
SpinnerNumberModel sModel = new SpinnerNumberModel(0, 0, 30, 1);
JSpinner spinner = new JSpinner(sModel);
JOptionPane.showInputDialog(spinner);
}
Run Code Online (Sandbox Code Playgroud)
结果如下:

如何删除文本框?
如何检查JSlider或JSpinner的值是通过图形界面而不是通过方法设置的setValue( int n)?
首先,为了让我的工作更容易解释,这里是我的一些代码:
JSpinner spin = new JSpinner();
JFormattedTextField text = getTextField(spin);
text.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
// Do stuff...
}
});
Run Code Online (Sandbox Code Playgroud)
...
private JFormattedTextField getTextField(JSpinner spinner) {
JComponent editor = spinner.getEditor();
if (editor instanceof JSpinner.DefaultEditor) {
return ((JSpinner.DefaultEditor )editor).getTextField();
} else {
System.err.println( "Unexpected editor type: "
+ spinner.getEditor().getClass()
+ " isn't a descendant of DefaultEditor" );
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
所以你可以看到,我走得那么远.事实上,当我在spinner(JFormattedTextField)的文本字段组件中键入一个值,然后按ENTER键时,它可以工作.
我现在想要的是能够让文本字段响应ENTER,而不必手动输入新值(这种方法使得微调器的目的无法实现).我怎么做?
我相信我在向你寻求帮助之前已完成了我的研究,但我可能忽略了一些东西.
我正在使用Nimbus laf编写一个java UI.我希望在状态改变时更改JSpinner的背景颜色,即,当按下向上或向下按钮时,jspinner中文本字段的背景颜色会改变颜色以表示该值已被更改.
我知道这可以使用OTHER lookandfeels但使用Nimbus不那么容易,例如:
((JSpinner.NumberEditor)jSpinner1.getEditor()).getTextField().setBackground(color.yellow);
我还研究过实际更改UI管理器的颜色主题,但我只想在操作发生时更改颜色,而不是仅在默认情况下改变整体颜色. 在这里或这里
这有可能吗?我从哪里开始?
如果做不到这一点,我希望只是改变一个按钮的颜色:
jButton.setBackground(Color.yellow);
这很容易,但由于默认颜色是绘制的渐变,我该如何将其更改为?
真的希望那里的人知道或可以提供帮助.
非常感谢提前!
我正在尝试使用SpinnerNumberModel设置JSpinner,其值为0.0005,min = 0.0,max = 1.0,步长= 0.0005.但是,当我使用这些参数创建一个微调器时,我会发现非常奇怪的行为.每次单击向上箭头,而不是从0.0005开始并增加0.0005,该值似乎保持为0.
为了确保这不仅仅是格式化问题,我在每次更改事件后打印出微调器的值.当然,每次单击向上箭头,控制台都会将值显示为0,然后显示0.0005,无论旋转器被点击多少次.
下面是我用来测试它的代码,包括一个值略有不同的微调器,可以很好地用于比较.
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(200, 80);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
final JSpinner spinner1 = new JSpinner(new SpinnerNumberModel(0.0005, 0.0, 1.0, 0.0005));
final JSpinner spinner2 = new JSpinner(new SpinnerNumberModel(0.05, 0.0, 1.0, 0.05));
panel.add(spinner1, BorderLayout.NORTH);
panel.add(spinner2, BorderLayout.SOUTH);
frame.add(panel);
spinner1.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
System.out.println("spinner1: " + ((Number) spinner1.getValue()).doubleValue());
}
}); …Run Code Online (Sandbox Code Playgroud) 我想允许"逗号"和"点"两者作为分隔符.
我可以在string中使用replace方法只获得一个分隔符,但问题是double值是JSpinner的值,我无法找到允许两个分隔符的任何方法.如果我将语言环境设置为例如法语只允许一个分隔符.