gpt4 book ai didi

java - 带 Trident 动画的 JScrollPane 出现 bug?

转载 作者:行者123 更新时间:2023-12-02 07:11:38 25 4
gpt4 key购买 nike

我正在使用Trident Java Animation Library ,因为我想要 JScrollPane 具有伪 Accordion 效果。

这是我的 SSCCE:http://pastebin.com/5xfBLmV5
您需要下载 Trident JAR .

问题

  • 我的 JScrollPane 有一个 JTextArea 的视口(viewport) View 。
  • 我希望 JFrame 以最小化的 TextView 打开。
  • JButton 单击时会向前或向后播放动画。
  • 我使用 BorderLayout.SOUTH` 在 JFrame 底部添加了一个标签


JScrollPane 无法正确计算 JTextArea 的实际高度,因此文本被截断并且该区域不可滚动.


这就是正在发生的事情:


之前


before expansion


点击“显示详细信息...”后


after expansion






最佳答案





基本上,使用正确的布局管理器并确保父容器无效应该会给您带来您正在寻找的结果。



import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.UUID;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import org.pushingpixels.trident.Timeline;
import org.pushingpixels.trident.ease.Spline;

public class ButtonFg extends JFrame {

private JScrollPane jsp;

public ButtonFg() {
JButton button = new JButton("sample");
button.setForeground(Color.blue);

JPanel panel = new JPanel(new GridBagLayout());
this.add(panel);

String s = UUID.randomUUID().toString();
for (int i = 0; i < 20; i++) {
s += "\n" + UUID.randomUUID().toString();

}
final JTextArea textArea = new JTextArea(s);
textArea.setLineWrap(true);
jsp = new JScrollPane(textArea);

final JButton label = new JButton("Show details...");
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = GridBagConstraints.REMAINDER;
panel.add(label, gbc);

gbc.weighty = 1;
gbc.anchor = GridBagConstraints.NORTH;
panel.add(jsp, gbc);

gbc.weighty = 0;
gbc.anchor = GridBagConstraints.SOUTH;
panel.add(new JLabel("End of panel"), gbc);

final Timeline rolloverTimeline = new Timeline(this);
rolloverTimeline.addPropertyToInterpolate("animate", new Dimension(400, 15), new Dimension(400, 200));
rolloverTimeline.setEase(new Spline(0.8f));

rolloverTimeline.setDuration(1000);
rolloverTimeline.setInitialDelay(50);

label.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (label.getText().toLowerCase().contains("show")) {
rolloverTimeline.play();
label.setText("Hide details...");
} else {
rolloverTimeline.playReverse();
label.setText("Show details...");
}
}

});

rolloverTimeline.playReverse();

this.setSize(400, 500);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public void setAnimate(Dimension size) {
jsp.setPreferredSize(size);
jsp.getParent().revalidate();
repaint();
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ButtonFg().setVisible(true);
}

});
}

}

关于java - 带 Trident 动画的 JScrollPane 出现 bug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15431778/

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