gpt4 book ai didi

java - 如何实现 JScrollPane 子行为?

转载 作者:搜寻专家 更新时间:2023-11-01 03:05:32 25 4
gpt4 key购买 nike

said in manual ,如果 child 没有实现 Scrollable,则 JScrollPane 依赖其内容的 preferredSize 属性。

显然这对我来说不是真的。我正在增加首选高度,但 JScrollPane 对此没有感觉或 react 。

package tests;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.Timer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Try01_JScrollPane extends JFrame {

private static final long serialVersionUID = 4123186105171813186L;

private static final Logger log = LoggerFactory.getLogger(Try01_JScrollPane.class);

JPanel yellowPanel = new JPanel();
{
yellowPanel.setPreferredSize(new Dimension(200,50));
yellowPanel.setSize(new Dimension(200,50));
yellowPanel.setBackground(Color.yellow);
}

JScrollPane scrollPane = new JScrollPane(yellowPanel);
{
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
}

AbstractAction increaseAction = new AbstractAction() {

@Override
public void actionPerformed(ActionEvent e) {
yellowPanel.setPreferredSize(new Dimension(yellowPanel.getPreferredSize().width, yellowPanel.getPreferredSize().height+100));
log.debug("preferred height is now {}", yellowPanel.getPreferredSize().height);
}
};

Timer increaseTimer = new Timer(1000, increaseAction);

{
setLayout(new BorderLayout());
add(scrollPane, BorderLayout.CENTER);

setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(200, 400);

setTitle("Try01_JScrollPane");

increaseTimer.start();
setVisible(true);
}

public static void main(String[] args) {

new Try01_JScrollPane();

}


}

最佳答案

JPanel 是容器,JComponent 也是,对于 JViewport 的任何更改,您必须通知 JScrollPane:-)

enter image description here

.

enter image description here

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.Timer;

public class Try01_JScrollPane extends JFrame {

private static final long serialVersionUID = 4123186105171813186L;
private JFrame frame = new JFrame("Try01_JScrollPane");
private JPanel yellowPanel = new JPanel();

@Override
public Dimension getPreferredSize() {
return new Dimension(300, 200);
}

{
yellowPanel.setBackground(Color.yellow);
}
private JScrollPane scrollPane = new JScrollPane(yellowPanel);

{
scrollPane.setPreferredSize(new Dimension(400, 300));
}
private AbstractAction increaseAction = new AbstractAction() {
private static final long serialVersionUID = 1L;

@Override
public void actionPerformed(ActionEvent e) {
yellowPanel.setPreferredSize(
new Dimension(yellowPanel.getPreferredSize().width + 100,
yellowPanel.getPreferredSize().height + 100));
yellowPanel.revalidate();
yellowPanel.repaint();
}
};
private Timer increaseTimer = new Timer(1000, increaseAction);

public Try01_JScrollPane() {
frame.add(scrollPane, BorderLayout.CENTER);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocation(150, 150);
frame.setVisible(true);
increaseTimer.start();
increaseTimer.setRepeats(true);
}

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

关于java - 如何实现 JScrollPane 子行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24203426/

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