Tag: awt

从侦听器中修改JFrame

可能重复: 如何在框架可见后调用setUndecorated()? 如果没有焦点并且在聚焦时装饰,我应该如何制作一个未装饰的JFrame? 这是我的代码: import java.awt.event.*; import javax.swing.*; public class Test extends JFrame { public Test() { setSize(100, 50); addWindowFocusListener(new WindowAdapter() { public void windowGainedFocus(WindowEvent e) { setUndecorated(false); System.out.println(“Hi!”); } public void windowLostFocus(WindowEvent e) { setUndecorated(true); System.out.println(“Bye!”); } }); } public static void main(String[] args) { new Test().setVisible(true); } } 这是运行时和聚焦/不聚焦时的问题: Exception in thread “AWT-EventQueue-0” […]

Java GUI旋转和Rectangle的翻译

我试图在JPanel中绘制一个矩形,它可以平移,然后自行旋转以模仿汽车的运动。 我已经能够使矩形平移和旋转,但它围绕(0,0)的原点旋转。 我非常高兴我可以让矩形移动和旋转,因为我对Java GUI很新,但我似乎无法得到如何让矩形围绕它自己旋转,因为我尝试了更多它,当我初始化矩形并将其旋转45度,它的位置已更改,我假设是从旋转方法附加的变换矩阵。 我通过网站查看了如何解决这个问题,但是我只发现了如何旋转矩形而不是如何旋转和移动模拟汽车的运动。 我认为它关注它的变换矩阵,但我只是猜测。 所以我的问题是如何让矩形能够旋转并在自身周围移动而不是JPanel中的一个点。 这是我到目前为止的代码: public class Draw extends JPanel implements ActionListener { private int x = 100; private int y = 100; private double theta = Math.PI; Rectangle rec = new Rectangle(x,y,25,25); Timer timer = new Timer(25,this); Draw(){ setBackground(Color.black); timer.start(); } public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2d = (Graphics2D)g; g2d.setColor(Color.white); […]

按Enter键时,Textfield中的KeyListener不会触发

我正在尝试制作一个程序,可以将华氏度转换为java中的celcius。 在程序中我有2个标签和1个TextField用于输入。 我想在用户输入温度时按转换温度进行转换温度。 为此,我在我的文本字段中添加了一个关键监听器,但它不起作用。 当我按Enter时,听者根本不会开火。 这是我的代码。 public class TempConv extends JFrame{ private JLabel info; private JLabel result; private JTextField input; private String outcome; public TempConv(){ super(“Temperature Converter”); setLayout(new BorderLayout()); info = new JLabel(“Enter Fahrenheit Temperature”); add(info, BorderLayout.NORTH); input = new JTextField(12); add(input, BorderLayout.CENTER); result = new JLabel(“Temperature in Celcius is: ” + outcome); add(result, BorderLayout.SOUTH); […]

在Java中处理循环事件的优雅方式?

我觉得这对我来说不是一个特定的问题; 以前每个人都可能遇到过这个问题。 为了正确说明它,这是一个简单的UI: alt text http://sofzh.miximages.com/java/www.freeimagehosting.net 如您所见,这两个微调器控制着一个变量 – “A”。 唯一的区别是他们使用不同的视图来控制它。 由于这两个微调器的显示值是同步的,因此出现循环事件。 如果我更改顶部微调器,将更改“A”,并且底部微调器的值也将相应更新。 但是 ,更新底部微调器的调用(例如setValue)也会触发另一个事件,指示顶级微调器根据底部微调器的值进行更新。 因此创建一个错误的循环,最终可能导致StackOverFlowexception。 我以前的解决方案有点麻烦:我放置了一个保护布尔值来指示是否应该执行第二次更新调用。 现在我想问一下“ 我怎样才能优雅地处理这种情况? ( 一般来说,不是特定于纺纱厂 )” 谢谢 更新: 由于我有2个答案建议我使用观察者结构,我不得不说些什么。 就像我说的那样,它很棒但远非完美。 不仅因为其固有的复杂性,而且还因为它无法解决问题 。 为什么? 要了解原因,您必须在Java Swing中实现View和Model-Controller的紧密耦合 。 让我们以我的微调器UI为例。 假设变量A实际上是Observer对象。 然后,在从顶部微调器触发第一个状态更改事件后,观察者“A”将更新其值并触发PropertyChange事件以通知底部微调器。 然后是第二次更新,它更新了底部微调器的视图。 但是 ,更改底部微调器的视图不可避免地会触发冗余事件,该事件将尝试再次设置“A”的值。 然后,完全构造致命循环并抛出堆栈溢出。 理论上,Observer模型试图通过引入2个独立的反馈路径来解决直接循环。 链式更新赔率(在事件响应代码中)隐含地形成连接两个路径的桥,再次进行循环。

消除初始按键延迟

当您键入文本框并按住某个键时,您会得到(a ……. aaaaaaaaaaaaaa),具体取决于初始按键延迟。 addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { // Handle key press here } 我正在创建一个用户反应非常重要的游戏。 如何完全消除这种延迟? 上面的代码不起作用。 我也尝试重写processKeyEvent而没有运气。

如何在awt中关闭窗口?

我在awt中创建一个小的应用程序,当我关闭窗口时,关闭按钮不起作用,但是我已经添加了关闭按钮的function,之后关闭按钮不起作用… import java.awt.*; import java.applet.*; import java.awt.event.*; import javax.swing.*; class ButtonDemo1 implements ActionListener { Button b1; TextField tf; Frame f; ButtonDemo1(String s) { f=new Frame(s); b1=new Button(“OK”); tf=new TextField(10); f.setSize(200,250); f.setVisible(true); b1.addActionListener(this); f.add(tf); f.add(b1); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we) { System.exit(0); } }); f.setLayout(new FlowLayout()); } public void actionPerformed(ActionEvent e) { if(e.getSource()==b1) { tf.setText(“Press […]

java.awt.Robot.waitForIdle()是否等待调度事件?

我正在使用java.awt.Robot进行Swing应用程序的集成测试,但是我无法按正确的顺序运行我的操作。 如何判断调用robot.mousePressed(…)的线程是否阻塞,直到Swing完成调度该事件为止? 显然, robot.setAutoWaitForIdle(true)没有用。 这是我的演示。 我期待“机器人完成!” 消息总是在“动作完成阻止”之后出现,但相反,它经常发生得太快。 import java.awt.AWTException; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Point; import java.awt.Rectangle; import java.awt.Robot; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.sql.Date; import java.text.DateFormat; import java.util.logging.ConsoleHandler; import java.util.logging.Formatter; import java.util.logging.LogManager; import java.util.logging.LogRecord; import java.util.logging.Logger; import javax.swing.GroupLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; public class RobotWaitForIdleDemo { […]

Java:ImageIcon与Image的区别

任何人都可以用noob的方式向我解释ImageIcon和Java中的Image类/对象之间有什么区别? 谢谢

更改AWT TextField的边框颜色

在AWT应用程序中,我需要设置TextField的边框颜色。 在JTextField中,我知道我们可以做到以下几点 JTextField tf = new JTextField(); tf.setBorder(BorderFactory.createLineBorder(Color.decode(“#2C6791”))); 但是在awt TextField中无法使用setBorder()方法。 这个问题有解决方法吗?

eclipse中的serialVersionUID字段警告

我刚开始使用AWT并在其中创建了一个简单的程序,它工作正常,但它在eclipse中显示了一条我不明白的警告信息: 可序列化类TestGUI不声明long类型的静态最终serialVersionUID字段 我知道警告消息与AWT无关,并且没有必要发布我的整个代码,但是当我试图制作代码的SSCCE时,警告也消失了。 由于我不知道为什么会产生这个警告,所以我不知道在我的SSCCE中保留哪一部分。 因此整个代码! 我的代码是: import java.awt.Frame; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class TestGUI extends Frame { /** * @param args */ private int x = 50; private int y = 50; TestGUI(String s) { addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { setVisible(false); System.exit(0); } }); addMouseListener(new […]