gpt4 book ai didi

java - OSX Java 文本字段中的乱码

转载 作者:行者123 更新时间:2023-11-29 03:32:25 25 4
gpt4 key购买 nike

当我在 OSX 上的 Swing 应用程序的 JTextField 中编辑文本时,文本会出现乱码。当我插入或删除字符时最明显,但只是在移动光标时出现伪影。数据没问题,但 UI 渲染不行。

Garbled text in OSX Java text input

是什么原因造成的,我该如何解决?

我正在使用 com.apple.laf.AquaLookAndFeel,就像在这个示例程序中一样。输入一些文本并使用箭头键移动光标以观察异常情况。

import java.awt.*;
import javax.swing.*;

class TextFieldDisplay {
public static void main(String[] args) {
MainWindow app = new MainWindow();
}
}

class MainWindow extends JFrame {
public MainWindow() {
try {
UIManager.setLookAndFeel("com.apple.laf.AquaLookAndFeel");
} catch(Exception e) {
System.out.println("AquaLookAndFeel is not supported on your platform.");
System.exit(1);
}

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
setMinimumSize(new Dimension(300, 100));

JPanel innerPanel = new JPanel();
JScrollPane scrollPane = new JScrollPane();
scrollPane.setPreferredSize(new Dimension(250, 20));
scrollPane.setViewportView(innerPanel);

JPanel mainPanel = new JPanel();
getContentPane().add(mainPanel);
mainPanel.add(innerPanel);

JTextField textField = new JTextField();
textField.setPreferredSize(new Dimension(250, 20));

innerPanel.add(textField);
pack();
}
}

我在编写 SSCCE 时注意到,在我添加 JScrollPane 之后,显示问题似乎突然出现了。

不确定它是否相关,但我使用的是带有视网膜显示屏的 Apple Java 版本 1.6.0_51

最佳答案

我突然想到两件事。

首先,您没有在 EDT 中初始化您的 UI,其次,您弄乱了组件的首选大小和最小大小。

在计算组件的大小时,您没有考虑字体指标,这似乎在呈现内容时会导致问题

先看看 Initial Threads .

import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.WindowConstants;

class TextFieldDisplay {

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
//UIManager.setLookAndFeel("com.apple.laf.AquaLookAndFeel");
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
System.out.println("AquaLookAndFeel is not supported on your platform.");
System.exit(1);
}
MainWindow app = new MainWindow();
}

});
}

}

class MainWindow extends JFrame {

public MainWindow() {

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
// setMinimumSize(new Dimension(300, 100));

JPanel innerPanel = new JPanel();
// JScrollPane scrollPane = new JScrollPane();
// scrollPane.setPreferredSize(new Dimension(250, 20));
// scrollPane.setViewportView(innerPanel);

JPanel mainPanel = new JPanel();
getContentPane().add(mainPanel);
mainPanel.add(innerPanel);

JTextField textField = new JTextField(20);
// textField.setPreferredSize(new Dimension(250, 20));

innerPanel.add(textField);
pack();
}

}

关于java - OSX Java 文本字段中的乱码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17517225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com