Tag: 用户界面

GUI以30 fps运行?

在测试一些使用Swingworker的实时仿真代码时,我注意到我的GUI似乎总是以30 fps运行,不多也不少。 每次用户与应用程序交互时(如鼠标移动)或调用Swingworker的process()方法时,我都会更新GUI。 Swingworker现在没有做任何事情,它只是从GUI抓取鼠标位置并通过publish()和process()方法将其作为克隆发回(我只是这样做,看看我能做什么,能做什么在线程之间进行通信时会这样做,因为multithreading对我来说仍然是一个新手。 我在任何地方都没有定时器,Swingworker的process()方法在GUI上调用repaint(),所以我想知道是什么原因导致GUI以30 fps更新? 是否可能默认情况下GUI中的vsync处于活动状态,或者它是Swingworker中process()方法的某些行为? 最后:有没有办法获得更高的帧速率? 这是一个表现出这种行为的sscce: public class SimGameTest implements Runnable { public static void main(String[] args) { SwingUtilities.invokeLater(new SimGameTest()); } @Override public void run() { MainWindow mainWindow = new MainWindow(new Game()); mainWindow.setLocationRelativeTo(null); mainWindow.setVisible(true); } } public class MainWindow extends JFrame { private Game game; private GamePanel gamePanel; public MainWindow(Game game) { […]

简单的弹出式Java表单,至少包含两个字段

当用户单击一个按钮时,我想显示一个至少应包含两个JTextField和两个JLabel的弹出窗体,因此不可能使用JOptionPane.showInputDialog 。

java – 如何在点击时动态添加swing组件给gui?

我想要做的是向电子邮件添加附件的类似原则,您可以单击一个按钮,打开一个新的浏览框,增加您可以拥有的单独附件的数量。 我是新人,所以如果有人能指出我的榜样?

如何在JPanel中设置背景图片

你好我使用JPanel作为我的框架的容器然后我真的想在我的面板中使用背景图片我真的需要帮助这是我的代码到目前为止。 这是更新,请在这里查看我的代码 import java.awt.*; import javax.swing.*; import java.awt.event.*; public class imagebut extends JFrame { public static void main(String args []) { imagebut w = new imagebut(); w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); w.setSize(300,300); w.setVisible(true); } public imagebut() { setLayout(null); // 🙂 PicPanel mainPanel = new PicPanel(“picturename.jpg”); mainPanel.setBounds(0,0,500,500); add(mainPanel); } class PicPanel extends JPanel{ private BufferedImage image; private int w,h; public […]

使用Java中的Swing在GUI开发中正确实现MVC模式

首先,我来自MVC的一个很大的PHP背景,当我开始使用PHP时,我浏览了很多次,尽我所能并在PHP中完善我的MVC-Like设计。 很多人都回答了很多帮助我的答案。 但是在Swing中开始GUI开发之后,关于Swing中MVC的答案是完全不同的。 例如,模型也是一种观点? 根据Oracle的建议, TextElementModel在这里没有任何逻辑业务,它所做的只是标记(设置颜色等)和设置数据,如设置文本等。 当我用PHP开发时,没有AbstractModel这样的东西,因为我总是被告知模型不是一个类,或者更多,它是一个处理逻辑业务的整个层。 在PHP中,我使用了服务,数据映射器和域对象,这个惊人的答案提示我在PHP中帮助了我: 如何在MVC中构建模型? 我的尝试 再次阅读之后,我想在Java中做一个类似的事情: 我有ControllerContainer创建所有控制器: public class ControllerContainer { private JFrame frame; public ControllerContainer(JFrame rune) { this.frame = frame; } public void initControllers() { Atest test = new Atest(frame); test.registerView(“test”, new ViewTest(test)); } } 如您所见,我将带有ViewTest实例的名为“test”的视图添加到控制器,现在它将在框架中可见,并且可以接受输入。 我的Controller类,应该是抽象的,但我还没有把它抽象化: public class Controller { private JFrame frame; private Map views = new […]

制作一个强大的,可resize的Swing Chess GUI

我如何制作这款可resize的Chess GUI? 我们公司的任务是制作国际象棋游戏。 它需要在Windows,OS X和Linux / Unix机器上运行,我们选择Java来实现这一点,同时保持一个通用的代码库(便于维护和降低成本)。 我的任务是创建GUI。 用户设计团队已经清除了以下规范。 与客户。 国际象棋比赛(国际象棋冠军)将有力量resize和直接,它包括: 顶部的工具栏,带有UI组件: 新按钮 保存按钮 恢复按钮 辞职按钮 用于向玩家提供消息的标签。 在游戏的左侧,我们需要一个可供将来使用的区域,它可能包括以下内容: 捕获的碎片列表 促销棋子时选择棋子的选择器 游戏统计 提示等 客户和逻辑团队仍在解决这方面的细节。 那么暂时,只需用包含?的标签来标记它? 作为文字。 GUI的其余部分将由棋盘本身组成。 它将有: 国际象棋棋盘的主要区域。 如果用户指向棋子,它应该显示带边框的焦点。 它也应该是键盘可访问的。 客户将提供多个棋子(各种尺寸,样式和颜色)的精灵表,以允许用户改变游戏的外观。 棋盘将有标签指示列(从左到右:A,B,C,D,E,F,G和H)和行(从上到下:8,7,6,5,4,3,2) &1)。 国际象棋棋盘和列/行标签将以1px黑色边框为边界,周围有8px填充。 随着玩家增加游戏的大小,棋盘应该保持正方形,否则填充可用空间。 国际象棋棋盘背后的背景色应该是赭色,但在下面的模型中,我们将棋盘背后的区域设为绿色,以突出resize的行为。 在游戏开始之前,最小尺寸的国际象棋冠军 激活新游戏按钮后,最小尺寸的国际象棋冠军 国际象棋冠军比最小尺寸更宽 国际象棋冠军比最小尺寸更高

如何将输出流设置为TextArea

我正在尝试为程序创建GUI面板,我想要通常打印到我的命令提示符的所有内容,以打印到TextArea对象。 我的GUI面板大部分都是格式化的,我无法将文本打印到TextArea,这里是我的文件: package guipanel; import javax.swing.*; import java.awt.*; import java.io.*; /** * * @author Dan */ public class GUIPanel extends JFrame { public GUIPanel() { initComponents(); } private void setOutputStream(boolean catchErrors) { System.setOut(aPrintStream); setVisible(true); requestFocus(); if (catchErrors) { System.setErr(aPrintStream); } } private void addTabs(JTabbedPane jTabbedPane1) { JPanel jPanel1 = new JPanel(); JPanel jPanel2 = new […]

JButton ActionListener – 仅在单击JButton之后才更新GUI

我的JButton ActionListener有问题。 我有一个在另一个类中定义的doTheCleaning()方法,在调用时会对我的GUI进行一系列更改。 public void doTheCleaning(){ //change image icon //had thread.sleep here //insert to text area //had thread.sleep here //etc } 然后在另一个类中,我实例化了包含我的doTheCleaning()方法的类,并为我的jbutton编写了带有actionperformed()方法的ActionListener,如下所示: public void actionPerformed(ActionEvent e){ //some code //newClass.doTheCleaning(); } 我知道如何像addActionListener()和其他东西那样做其余的事情,所以不需要对此提出质疑。 我担心的是,调用doTheCleaning()方法时执行的GUI中的所有更改仅在单击按钮后才会应用。 发生这种情况时,我的标签和textarea中发生的更改之间的连续性未显示。 如果我直接在我的测试器类中调用它,但在actionperformed方法中调用它只显示我的GUI的最终状态,代码工作正常。 我需要先显示哪个元素已更改,然后是下一个元素,依此类推。 当我需要在单击JButton时才需要进行这些更改时,我怎么能实现它? **我在java中用GUI做的不太好。 如果没有我给我的代码,你们明白了我的观点。 但如果有必要,我可以。 谢谢。

扫雷行动事件

有没有办法让左右鼠标点击特定的事件动作? 我正在创造一个扫雷艇gui,所以当一个方块被左击时它将被揭开,当它被右击时它将被标记。 我不知道如何在语法上检查这个并且无法在tut上找到它。 谢谢您的帮助!

设置JFrame位置的最佳做法

我有一个(有点哲学)问题相对于Swing,或者一般的GUI编程。 是否有关于在何处找到应用程序中使用的JFrame实例的最佳实践? 第一帧和主框架应该放在哪里? 总是在中心( setLocationRelativeTo(null) )? 儿童JFrame应该放在哪里? 相对于它的父JFrame ,屏幕的中心,我们想要的任何地方? 我一直认为有一些最好的做法,有点像这样的“GUI圣经”,我错了,我应该(喘息)随意决定做什么?