【问题标题】:Swing layout issue on migration to java 8迁移到 java 8 的 Swing 布局问题
【发布时间】:2015-06-26 12:05:11
【问题描述】:

我在 java 5 中的 swing 应用程序有一个类似的显示

迁移到 java 8 后,放大并仅显示其中的一部分,例如

我看到this 并尝试将 J2D_D3D 设置为环境变量,并尝试将其作为 vm 参数传递。但没有解决问题。知道这可能是什么吗?

【问题讨论】:

  • 您能发布一个MCVE 代码示例来说明您的问题吗?
  • 是从 6 迁移到 8 还是从 7 迁移到 8?
  • 如果没有 MCVE,我认为任何人都无法解决这个问题。但是您也可以通过查看代码在 Java 6 和 Java 7 上的行为方式来帮助追踪问题。
  • 我会尝试发布一个 MCVE

标签: java swing java-8 rendering


【解决方案1】:

作为参考,这是一个没有有问题的例子。它使用具有全等间隙和边框的GridLayout(0, 1)。调整封闭框架的大小以查看效果。尝试使用Box(BoxLayout.Y_AXIS) 作为替代方案。

我怀疑原始代码(错误)使用了setXxxSize()setBounds() 的某种组合,如果所选外观具有按钮的 UI 委托指定的不同几何形状,则会显示所显示的效果。

import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/** @see https://stackoverflow.com/a/31078625/230513 */
public class Buttons {

    private void display() {
        JFrame f = new JFrame("Buttons");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel p = new JPanel(new GridLayout(0, 1, 10, 10));
        p.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        for (int i = 0; i < 3; i++) {
            p.add(new JButton("Button " + (i + 1)));
        }
        f.add(p);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Buttons()::display);
    }
}

【讨论】:

    猜你喜欢
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多