滚动时 JScrollPane 内容不刷新

The JScrollPane content doesn't refesh while scrolling

我正在创建一个包含 JScrollPanel 的简单选项图形用户界面。

问题是当我在 JScrollPanel 中滚动 JPanel 的所有内容时,它不会像那样刷新: Bad Refresh Scrolling

另一个问题是,并非我所有的文本字段都绘制得很好,组合框字段位于第一个文本字段的后面。

这是我的代码:

我的代码有什么问题导致这种丑陋的刷新?没看懂。

也许我需要实现一种每次滚动时重新绘制框架的侦听器?

更奇怪的是,如果我替换

add(scrollPane, constraint);

来自

add(optionsPane, constraint);

内容很好(至少在这个例子中)。

谢谢你

朱利安

基本问题是,您使用的是 java.awt.TextField,它是轻量级容器内的重量级组件。纯属自找麻烦,他们往往配合不好

而是使用 javax.swing.JTextField

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.EventListenerList;

public class ChangeOptionTF extends JPanel implements ActionListener {

    private static final long serialVersionUID = 3355314012553851743L;
    private JTextField tf;
    private JButton saveBtn;

    private EventListenerList listeners;

    public ChangeOptionTF(String label) {

        listeners = new EventListenerList();

        GridBagLayout layout = new GridBagLayout();
        GridBagConstraints c = new GridBagConstraints();
        setLayout(layout);

        JLabel jLabel = new JLabel(label);
        c.fill = GridBagConstraints.BOTH;
        c.gridx = 0;
        c.gridy = 0;
        c.weightx = 1;
        add(jLabel, c);

        tf = new JTextField();