相关疑难解决方法(0)

我应该避免在Java Swing中使用set(Preferred | Maximum | Minimum)Size方法吗?

有几次我因为建议使用以下方法而受到批评:

  1. 有必要对setPreferredSize
  2. 了setMinimumSize
  3. setMaximumSize

Swing组件上.当我想在显示的组件之间定义比例时,我没有看到任何替代它们的用法.我被告知这个:

对于布局,答案总是相同的:使用合适的LayoutManager

我在网上搜索了一下,但我没有找到任何关于这个主题的综合分析.所以我有以下问题:

  1. 我应该完全避免使用这些方法吗?
  2. 已经定义了这些方法的原因.那我什么时候应该使用它们?在哪种情况下?出于什么目的?
  3. 使用这些方法的负面后果究竟是什么?(我只能考虑在具有不同屏幕分辨率的系统之间添加可移植性).
  4. 我认为任何LayoutManager都不能完全满足所有需要的布局需求.我是否真的需要为布局上的每个小变化实现一个新的LayoutManager?
  5. 如果4的答案是"是",那么这是否会导致LayoutManager类的扩散变得难以维护?
  6. 在我需要定义组件子级之间的比例的情况下(例如,child1应该使用10%的空间,child2 40%,child3 50%),是否可以在不实现自定义LayoutManager的情况下实现这一点?

java swing layout-manager

471
推荐指数
8
解决办法
5万
查看次数

如何在Windows/Linux上设置Java Swing应用程序的DPI?

如果您的DPI超过150的显示器(例如Macbook Pro),您可能也会发现问题:Java Swing应用程序上的字体对于高DPI显示器来说太小了,我根本无法更改字体大小(It直接忽略Windows DPI,仅显示非常原始的DPI - > 96).除了改变屏幕分辨率,我什么也做不了,这绝对会让LCD上的一切变得模糊.

是的,我有一台带有高DPI显示器的笔记本电脑,分辨率为1920x1080的15.6英寸笔记本电脑,笔记本电脑上的一些Java桌面应用程序看起来很小,比如Matlab,Burpsuite等.我一直在互联网上搜索很长时间,但是仍然找不到问题的方法.我知道我可以通过改变JRE字体JRE_HOME/lib/font/fontconfig.properties.src,但我找不到任何地方来设置Java桌面字体的默认字体大小或DPI.

问题没有解决方案吗?你有一台高DPI显示器吗?你如何处理这些应用程序?Swing是否会放弃高DPI用户?

java matlab fonts swing dpi

66
推荐指数
4
解决办法
5万
查看次数

JTextFields在JPanel上的活动绘图之上,线程化问题

有没有人曾尝试使用Swing构建一个合适的多缓冲渲染环境,在此环境中可以添加Swing用户界面元素

在这种情况下,我有一个动画红色矩形绘制在背景上.背景不需要每帧更新,因此我将其渲染到BufferedImage上,并仅重绘清除矩形的先前位置所需的部分.请参见下面的完整代码,这扩展了以前的线程通过@trashgod给出的例子,在这里.

到现在为止还挺好; 流畅的动画,低CPU使用率,无闪烁.

然后我将JTextField添加到Jpanel(通过单击屏幕上的任何位置),并通过在文本框内单击来关注它.现在,清除矩形的先前位置会在每个光标闪烁时失败,请参见下图.

我很好奇是否有人知道为什么会发生这种情况(Swing不是线程安全的?图像是异步绘制的?)以及寻找可能解决方案的方向.

这是在Mac OS 10.5,Java 1.6上

JPanel重绘失败了http://www.arttech.nl/javaredrawerror.png

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Transparency;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.Timer;

public class NewTest extends JPanel implements 
    MouseListener, 
    ActionListener, 
    ComponentListener, 
    Runnable 
{

JFrame f;
Insets insets;
private Timer t = new Timer(20, …
Run Code Online (Sandbox Code Playgroud)

java swing multithreading rendering buffering

10
推荐指数
1
解决办法
1万
查看次数

不可调整大小的窗口边框和定位

如果我创建不可调整大小的JFrame,并启用Windows Aero setLocation似乎没有正确考虑窗口边框.

在下面的代码中,我希望第二帧位于第一帧的右侧,而不是边框​​重叠.如果禁用Aero,或者我删除了setResizable对此的调用,则按预期完成.

import java.awt.Rectangle;
import javax.swing.JFrame;
public class FrameBorders {
public static void main(String[] args) {
    JFrame frame1 = new JFrame("frame 1");
    JFrame frame2 = new JFrame("frame 2");

    frame1.setResizable(false);
    frame2.setResizable(false);

    frame1.setVisible(true);        
    Rectangle bounds = frame1.getBounds();      
    frame2.setLocation(bounds.x+bounds.width, bounds.y);
    frame2.setVisible(true);

}
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么或这是一个错误?如何在没有重叠边框的情况下并排显示2个不可调整的对话框?

编辑:添加了截图(也将frame2更改为JDialog而不是JFrame)

Aero On: Aero On

Aero Off: Aero Off

Aero On但可调整大小: Aero On但可调整大小

java windows swing aero absolutelayout

7
推荐指数
2
解决办法
3943
查看次数

使用JavaScript或CSS检测缩放设置(dpi)

我注意到一台配有1920x1080屏幕的小型笔记本电脑,Windows 10会自动调整缩放比例.我看到它高达150%.有没有办法可以发现这个?我的媒体查询没有启动,因为它们是在px中设置的.

javascript css

4
推荐指数
3
解决办法
3296
查看次数