gpt4 book ai didi

Java Swing,可滚动的 HBox

转载 作者:行者123 更新时间:2023-11-30 10:20:09 25 4
gpt4 key购买 nike

我正在编写一个程序,试图实现一个可滚动的 HBox。遗憾的是,JSCrollPane 似乎根本不起作用,当窗口变得太小时,图像就会开始相互剪辑。

enter image description here

带有图像的 Pane 具有以下代码:

    public class Caller extends JPanel {

public Caller() {
initPanel();
}

private void initPanel() {
this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
}

public void addBall(Ball ball) {
this.add(ball);
}
}

和主框架:

public class GUI extends JFrame {

public GUI() throws HeadlessException {
super();
initMainFrame();
initCaller();
}

private void initCaller() {
Caller caller = new Caller();
JScrollPane scrollPane = new JScrollPane(caller, JScrollPane.VERTICAL_SCROLLBAR_NEVER, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

caller.addBall(new Ball(5));
caller.addBall(new Ball(16));
caller.addBall(new Ball(34));
caller.addBall(new Ball(34));
caller.addBall(new Ball(34));

this.add(scrollPane);
}

private void initMainFrame() {
this.setTitle("Main");
this.setSize(new Dimension(500,200));
}
}

球绘制代码:

@Override
public void paint(Graphics g) {
super.paint(g);
g.drawImage(ballImage, 0,0, this);
g.setFont(new Font("Arial Black", Font.BOLD, 20));
g.setColor(Color.WHITE);
g.drawString(designation, 20,ballImage.getHeight()/2);
}

我是否以错误的方式实现了滚动条?

最佳答案

看起来您的 Ball JComponent 缺少有关其首选/最小/最大尺寸的信息,因此 Caller 面板带有 BoxLayout 不知道它们是什么,当您减小宽度时,您的组件的尺寸将减小,而不是反射(reflect)滚动需求的滚动 Pane 。

您必须重写Ball 类的相关方法,例如:

@Override
public Dimension getPreferredSize() {

return new Dimension(ballImage.width, ballImage.height);

}

@Override
public Dimension getMaximumSize() {

return new Dimension(ballImage.width, ballImage.height);

}

@Override
public Dimension getMinimumSize() {

return new Dimension(ballImage.width, ballImage.height);

}

关于Java Swing,可滚动的 HBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48342048/

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