- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Quick picture to show what is happening
JSpinner 出现了两次,如上图所示。第一次出现在不应该出现的点 (0,0) 处的情况下,如果没有微调按钮,则无法选择、编辑或使用。
奇怪的是,其他所有组件都没有问题。只有jspinner。我正在使用 Java 7 并在 Netbeans(不是 gui 开发工具包)中进行开发。这是 java 7 的错误吗?如果不是,我可以尝试让 JSpinner 在我指定的区域仅绘制 1 次吗?
说明问题的代码:
我将其添加到 JPanel 的子类中,如下所示:
public class MyCustomGUI extends JPanel {
private JSpinner entrySpinner;
public MyCustomGUI () {
super(null);
this.setDoubleBuffered(true);
entrySpinner = new JSpinner(new SpinnerNumberModel(0, 0, Integer.MAX_VALUE, 1));
add(entrySpinner);
....
我有一个方法来给它一个位置:
public void resize() {
entrySpinner.setBounds((int) (this.getWidth() * .2), (int) (this.getHeight() * 0.38), (int) (this.getWidth() * 0.3), (int) (this.getHeight() * 0.1));
}
我在这里重写了绘制方法:
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(
RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
.. draw shapes..
super.paintComponents(g);
super.validate();
Toolkit.getDefaultToolkit.sync();
g.dispose();
}
最佳答案
paintComponent
两次,一次是在调用 super.paint
时调用,一次是手动调用paint
方法中调用 validate
,这只会导致组件开始重新绘制,一遍又一遍……说得好再见你的 CPU...Toolkit.getDefaultToolkit.sync();
,但我有理由相信您不应该在 中执行此操作>绘制
方法paint
方法。执行自定义绘制的推荐方法是 paintComponent
方法(由 paint
调用)您可能想通读一下
用示例更新
帮我修好了...
左边是你的代码,右边是我的
public class TestPaintSpinner {
public static void main(String[] args) {
new TestPaintSpinner();
}
public TestPaintSpinner() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setDoubleBuffered(true);
setLayout(new GridBagLayout());
add(new JSpinner(new SpinnerNumberModel(0, 0, Integer.MAX_VALUE, 1)));
JPanel panel = new JPanel();
panel.add(new JLabel("Subpanel"));
add(panel);
}
// public void paint(Graphics g) {
// super.paint(g);
//
// Graphics2D g2d = (Graphics2D) g;
// Point2D sPoint = new Point2D.Float(0, 0);
// Point2D ePoint = new Point2D.Float(this.getWidth(), this.getHeight());
//
// g2d.setRenderingHint(
// RenderingHints.KEY_TEXT_ANTIALIASING,
// RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
// super.paintComponents(g);
// super.validate();
// Toolkit.getDefaultToolkit().sync();
// g.dispose();
// }
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g); //To change body of generated methods, choose Tools | Templates.
Graphics2D g2d = (Graphics2D) g;
Point2D sPoint = new Point2D.Float(0, 0);
Point2D ePoint = new Point2D.Float(this.getWidth(), this.getHeight());
// Note, this will effect every component painted after this one!!
g2d.setRenderingHint(
RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
}
}
}
关于Java JSpinner 绘制两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13484376/
我正在尝试让 JSpinner(包含分/秒计时器)为一群按自己的方式工作的人工作,他们不关心鼠标,但希望每次击键都能准确地完成他们的任务习惯了。它几乎按照我想要的方式工作,但最后一英里是最难的。 这在
我正在 netbeans 中构建一个小型应用程序,我使用 JSpinner 组件来设置产品的数量。如何将微调器设置为仅取正值?在 Netbeans 中是否有可以设置的选项或方法JSpinner ? 额
我正在使用 JAVA 开发 i18n 应用程序。 我正在使用 JSpinner与 String[]作为模型以允许用户选择某些选项。 我的问题是 JSpinner 中的文本正在因语言而变化。 所以我不想
Quick picture to show what is happening JSpinner 出现了两次,如上图所示。第一次出现在不应该出现的点 (0,0) 处的情况下,如果没有微调按钮,则无法选
我的问题是 JSpinner(在代码中名为 spinnerCantidadPuntas)有时根本不显示,或者只是有错误。当我运行项目(F6)时,它几乎肯定无法正确显示,当我调试它(CTRL+F5)
我可以使用 getValue() 获取当前值,但是是否可以获取 JSpinner 的最大和最小允许值?从文档中找不到 JSpinner 的 getMax() 或 getMin() 等方法。 http:
这个问题已经有答案了: How to set JSpinner as non editable? (3 个回答) 已关闭 9 年前。 如何制作一个不允许手动输入的 JSpinner。我希望我的微调器只
过去一个月我一直在开发 GUI,我发现 JSpinner 无法正确显示。只出现边框,没有数字,没有箭头,看图: 我可以判断某个组件何时启用或未启用,但这不是问题所在。 入门类,其中 MAIN 方法是:
我创建了以下类,它扩展了 JSpinner 以迭代 dd/mm/yyy 值。 public class DateSpinner extends JSpinner{ Calendar calen
当我的 JSpinner 为空时,我想采用 null 值。但当我调用 getValue() 函数时,它返回 0.0 。 public JFormattedTextField getTextFiel
我试图实现以下目标。 我想使用一个使用数字作为数据的 JSpinner,但我想让它像这样渲染:“6/10”,即“值/最大值”,其中默认的 JSpinner 只显示“值” 。当然,我使用 Spinner
我有一个带有 ChangeListener 定向的 JSpinner 。但只有当我按 Enter 或单击其中一个 JSpinner 按钮时,才会激活 ChangeListener 。我想知道如何在值更
我得到了步长为 0.01 的 JSpinner,但 getValue() 似乎返回奇数值。 举个例子:它是 0.06,如果我增加它,它有时会显示 0.069999999999999999 而不是 0.
我有一个 JSpinner,我创建它并将其添加到屏幕上,然后使用 setValue 更新它的值。如果我随后调用 getValue,则会返回正确的更新值。但它没有显示在 UI 上,当我单击按钮递增时,它
我有一个 JSpinner,其中所有整数都作为 model。我希望它的值随着向下箭头而增加,并且随着向上箭头而减少,这与默认用法完全相反。 我已经使用具有先前值的变量完成了此操作,并添加了一个 Cha
所以我的问题是,我之前在 Jspinners 上也遇到过这个问题。是我用标题边框包围我的 jspinner 吗?然而,在 GUI 中,它会剪切标题文本,因为 js 较小。那么,我如何强制 gui 根据
我有一个类,其中有两个 JSpinner 对象,x 和 y。我有一个更改监听器,它已添加到两者中。有人可以告诉我如何实现我的更改监听器,以便监听器可以区分两个对象之间的区别。例如伪代码: if(sou
我想同时允许“逗号”和“点”作为 double 分隔符。 我可以在字符串中使用 replace 方法来只获取一个分隔符,但问题是 double 值是 JSpinner 的值,我无法找到任何允许两个分隔
我有数组 JSpinners,但我无法监听。 这个不起作用,因为 Java 需要最终变量。当我将 spin4[j] 更改为 spin4[0] <- 它正在工作。但我需要带有 JSpinners 的数组
下面这段代码实际上做了什么, //Make the year be formatted without a thousands separator. spinner.setEdito
我是一名优秀的程序员,十分优秀!