标签: swingutilities

Java鼠标事件右键单击

在我的三键鼠标MouseEvent.BUTTON2=中键单击和MouseEvent.BUTTON3=右键单击.

这是两键鼠标的情况吗?

谢谢

java mouse swing right-click swingutilities

82
推荐指数
2
解决办法
11万
查看次数

Java/Swing:从JPanel内部获取Window/JFrame

如何获得JPanel所在的JFrame?

我目前的解决方案是询问面板的父级(依此类推),直到找到一个Window:

Container parent = this; // this is a JPanel
do {
    parent = parent.getParent();
} while (!(parent instanceof Window) && parent != null);
if (parent != null) {
    // found a parent Window
}
Run Code Online (Sandbox Code Playgroud)

是否有更优雅的方式,标准库中的方法可能是?

java swing jframe swingutilities

70
推荐指数
4
解决办法
7万
查看次数

为什么在main方法中使用SwingUtilities.invokeLater?

经过多年的Java编程,我总是习惯于创建main()这样的方法:

public static void main(String[] args) 
{
    runProgram();
}
Run Code Online (Sandbox Code Playgroud)

但是最近我从Web上学习了一些代码并且有时看到这个代码而不是main()上面的常规用法:

public static void main(String[] args) 
{
    SwingUtilities.invokeLater(new Runnable() 
    {
        public void run() 
        {
            runProgram();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我只是想知道:

  • 为什么要使用这个而不是通常的main()方式?当我试一试时,我看不出有任何区别.
  • 这两种方式有什么区别?

感谢您阅读我和您的答案.

java swing program-entry-point invokelater swingutilities

22
推荐指数
2
解决办法
8978
查看次数

什么是SwingUtilities.invokeLater

可能重复:
SwingUtilities.invokeLater做什么?
SwingUtilities.invokeLater

我已经看过几百次这段代码了:

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          createAndShowGUI();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:做invokeLater()什么?如果我只是在主线程中创建并显示我的GUI,会发生什么样的坏事?

java swing invokelater swingutilities

13
推荐指数
3
解决办法
3万
查看次数

Java - SwingWorker和SwingUtilities.invokeLater()之间的区别

SwingWorker 用于以下目的:

  • 用于在不同的线程中运行长时间运行的任务,以防止GUI无响应
  • 用于通过done()方法在任务结束时使用长时间运行的任务生成的结果更新GUI .
  • 用于通过任务publish()process()方法生成和发布的中间结果不时更新GUI .

SwingUtilities.invokeLater() 可以执行以下任务:

  • SwingWorker.execute()我们可以执行,而不是从EDT 执行方法,ExecutorService.submit(new MyRunnable())因为它还将创建另一个可以执行长时间运行任务的线程.
  • 为了在任务结束时更新GUI,我们可以在任务结束时放置代码(用done()case1的方法编写)SwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode()).
  • 为了在任务中间更新GUI,我们可以将代码(用process()case1的方法编写)SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode())放在我们publish()在case1中调用方法的地方.

我问这个问题是因为Java-SwingWorker中指定的问题- 我们可以从其他SwingWorker调用一个SwingWorker而不是EDT可以通过SwingUtilities.invokeLater()但是无法解决SwingWorker

java swingworker swingutilities

9
推荐指数
1
解决办法
7878
查看次数

SwingUtilities3.setDelegateRepaintManager 的 Java 9 替换

在尝试移植 Swing 代码以与 Java 模块系统兼容时,我在尝试替换SwingUtilities3.setDelegateRepaintManager.

我有一个组件,当它的任何子级请求重绘时,我需要转换该区域(特别是这试图为org.pbjar.jxlayer.plaf.ext.TransformUI知道这一点的任何人移植代码)。目前,这是通过设置组件的委托重绘管理器并拦截对 的调用来完成的addDirtyRegion

现在使用 Java 9,这样做的方法不再作为公共 api 可用。原始代码提供了一种替代方法,该方法最初用于SwingUtilities3.setDelegateRepaintManager不可用的旧版 Java ,它只是用RepaintManager委托实现替换了全局。如果组件包含在需要转换的实际组件中,它会检查每个调用。然而,该解决方案丢弃了 的所有内部数据RepaintManager并导致在调整框架大小时严重闪烁。

这是当前使用的代码的删节版:

SwingUtilities3.setDelegateRepaintManager(component, new TransformRepaintManger());

...

class TransformRepaintManager extends RepaintManager {

    @Override
    public void addDirtyRegion(JComponent c, int x, int y, int w, int h) {
        if (c.isShowing()) {
            Point point = c.getLocationOnScreen();
            SwingUtilities.convertPointFromScreen(point, c);
            Rectangle transformPortRegion = transform(new Rectangle(x + point.x, y + point.y, w, h), c);
            RepaintManager.currentManager(c)
                .addDirtyRegion(c,
                    transformPortRegion.x, transformPortRegion.y,
                    transformPortRegion.width, transformPortRegion.height);
        } …
Run Code Online (Sandbox Code Playgroud)

java swing java-platform-module-system swingutilities repaintmanager

9
推荐指数
0
解决办法
79
查看次数

SwingUtilites:如何从Java中的另一个线程返回值?

我正在尝试用Java创建一个应用程序.为了使Swing正常工作,我这样做了:

public static void main(String[] array){ 

String outerInput;
SwingUtilities.invokeLater(new Runnable(){
    @Override
    public void run() {
        // I want this string input.
        String input = JOptionPane.showInputDialog(
            null,"Stop ?", JOptionPane.QUESTION_MESSAGE);  
});
// How can I get this input value in String outerInput?
}
Run Code Online (Sandbox Code Playgroud)

我如何在我的主体中获得此输入字符串?

java swing multithreading input swingutilities

6
推荐指数
2
解决办法
4303
查看次数

在运行时更改字体

请问有没有另一种方法如何在运行时更改Font作为整个AWT/Swing GUI使用FontUIResource,没有任何知识/兴趣,如果有局部变量和JComponents的类型

在此输入图像描述在此输入图像描述

import java.awt.*;
import java.awt.event.*;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.plaf.FontUIResource;
import javax.swing.plaf.basic.BasicComboBoxRenderer;

public class SystemFontDisplayer extends JFrame {

    private static final long serialVersionUID = 1L;
    private JFrame frame = new JFrame("Nimbus UIDeafaults and Font");
    private JComboBox fontsBox;
    private javax.swing.Timer timer = null;
    private JButton testButton = new JButton("testButton");
    private JTextField testTextField = new JTextField("testTextField");
    private JLabel testLabel = new JLabel("testLabel");

    public SystemFontDisplayer() {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[] fontFamilyNames = ge.getAvailableFontFamilyNames(Locale.getDefault());
        fontsBox = new …
Run Code Online (Sandbox Code Playgroud)

java fonts swing jcomponent swingutilities

6
推荐指数
1
解决办法
4586
查看次数

EventQueue.invokeLater vrs SwingUtilities.invokeLater

有人可以突出显示这两者之间的差异吗?两者都是必需的?!

我有一个应用程序,它同时使用,但想知道一个是否优于另一个.显然他们都接受了Runnable object,所以对我来说 - 我想我可以使用我喜欢的那个.

为什么这两个类似的功能在不同的类中?我知道有一个在awt和另一个Swing,但他们不是做同样的事情吗?

java swing awt eventqueue swingutilities

6
推荐指数
2
解决办法
2501
查看次数

如何修复“(java:22494):Gdk-警告...”

我正在编写一个 javafx 程序,我需要面板以恒定的速度更新。现在它设置为每秒更新一次。但我得到了这个错误,通常(但并非总是)当整个场景变得扭曲时,面板中会出现故障(它就像镜子本身以奇怪的断断续续的 x 模式一样。很难解释)。

完整错误:(java:22494): Gdk-WARNING **: 18:38:59.118: 调用 XSetErrorHandler() 并推送 GDK 错误陷阱。不要那样做。

这是我的计时器代码:

Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run()  {
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            String x = txtDisplay.getText();
                            txtDisplay.setText(x.substring(1, x.length()) + x.substring(0, 1));
                        } catch (NullPointerException e) {
                            System.out.println("Error.");
                        }
                    }
                });
            }
        }, 0, 500);
Run Code Online (Sandbox Code Playgroud)

我认为问题出在上面的块上,就像我可能违反了一些基本的挥杆规则一样。我的另一个想法是,它有两种方法同时编辑同一文本区域,因为我有其他方法设置文本区域的文本。

我很高兴能找到错误的解决方案或执行上述方法的更好方法。只需要每秒运行一次而不会崩溃。

谢谢。

编辑:一个新的开发,我现在不断收到“线程“AWT-EventQueue-0”java.lang.NullPointerException 中的异常”,但堆栈跟踪没有引用我的代码中的任何位置。

swing javafx swingutilities

6
推荐指数
1
解决办法
9910
查看次数