标签: scrollpane

如何调整JavaFX ScrollPane内容的大小以适应当前大小

我有一个BorderPaneScrollPane为中心元素.它会自动调整大小以填充屏幕.里面ScrollPane是一个HBox没有内容但是是一个拖放目标.因此,我希望它填补其父母ScrollPane.

这样做的首选方法是什么?

到目前为止我所尝试的是重写ScrollPane.resize(...)调整大小的方法,HBox但它似乎相当复杂和非正统.

编辑:要为此添加一些有用的代码,这就是我可以解决问题的方法,但我相信必须有更好的方法来做到这一点:

@Override
public void resize(double width, double height) {
    super.resize(width, height);

    double scrollBarHeight = 2;
    double scrollBarWidth = 2;

    for (final Node node : lookupAll(".scroll-bar")) {
        if (node instanceof ScrollBar) {
            ScrollBar sb = (ScrollBar) node;
            if (sb.getOrientation() == Orientation.HORIZONTAL) {
                System.out.println("horizontal scrollbar visible = " + sb.isVisible());
                System.out.println("width = " + sb.getWidth());
                System.out.println("height = " + sb.getHeight());
                if(sb.isVisible()){
                    scrollBarHeight = sb.getHeight();
                } …
Run Code Online (Sandbox Code Playgroud)

resize javafx scrollpane autolayout

49
推荐指数
2
解决办法
4万
查看次数

定制设计JScollPane Java Swing

我需要为我的所有scrollpanes设计这个滚动条:

在此输入图像描述

使用Java Swing.我正在使用Netbeans IDE.什么是最简单的解决方案?

非常感谢你.

问候

java customization swing scrollbar scrollpane

12
推荐指数
1
解决办法
1万
查看次数

JavaFX ScrollPane边框和背景

我在ScrollPane的默认背景和边框方面遇到了一些问题.使用这种风格使问题更加清晰.

setStyle("-fx-background-color:blue; -fx-border-color:crimson;");
Run Code Online (Sandbox Code Playgroud)

图像显示背景和边框

我已经尝试过这种风格并且没有运气,只有红色的边框消失了,并留下了我的蓝色边框.

setStyle("-fx-background-color:blue; -fx-background-insets:0; -fx-border-color:crimson; -fx-border-width:0; -fx-border-insets:0;");
Run Code Online (Sandbox Code Playgroud)

图像显示了我最好的工作后的背景和边框

我看过这个旧帖子JavaFX Hide ScrollPane灰色边框http://docs.oracle.com/javafx/2/ui_controls/editor.htm

这行代码既不起作用也不起作用

scrollPane.getStyleClass().add("noborder-scroll-pane");
Run Code Online (Sandbox Code Playgroud)

谢谢

scrollpane javafx-2

12
推荐指数
4
解决办法
2万
查看次数

缩放JavaFx:当内容大小超过ScrollPane视口时,将使用ScrollEvent

我有一个需要在ScrollPane中放大的应用程序,但是按照我目前的方法,我仍然面临着两个挑战.为了复制问题,我编写了一个小应用程序ZoomApp,您将找到下面的代码.它的有限功能允许在某些任意形状上放大和缩小(使用Ctrl +鼠标滚轮).当缩放的内容超出窗口范围时,滚动条应该显示.

挑战1.内部组缩小尺寸时出现滚动条时,ScrollEvent不再到达我的ZoomHandler.相反,我们开始向下滚动窗口,直到它到达底部,当再次缩放按预期工作时.我想也许吧

scrollPane.setPannable(false);
Run Code Online (Sandbox Code Playgroud)

会有所作为,但没有.如何避免这种不良行为?

挑战2. 我将如何去到中心innerGroup滚动窗格内,不诉诸画一个像素的左上角innerGroup与所需三角洲平方?

作为旁注,根据JavaDoc for ScrollPane:"如果应用程序希望滚动基于节点的可视边界(对于缩放内容等),则需要将滚动节点包装在一个组中".这就是为什么我在ScrollPane中有一个innerGroup 一个outerGroup的原因.

这个JavaFX新手非常赞赏任何指导我解决方案的建议.

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.SceneBuilder;
import javafx.scene.control.ScrollPane;
import javafx.scene.input.ScrollEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

/**
 * Demo of a challenge I have with zooming inside a {@code ScrollPane}.
 * <br>
 * I am running JavaFx 2.2 on a Mac. {@code java -version} yields:
 * <pre> …
Run Code Online (Sandbox Code Playgroud)

center zoom scrollpane javafx-2

9
推荐指数
1
解决办法
8261
查看次数

Java:如何在ScrollPane Viewport上绘制非滚动叠加层?

我想使用ScrollPane在其视口中显示图像,并在图像上还有一个网格(或框,或任何其他类型的注册/位置标记)覆盖.滚动时我需要叠加层保持固定(意味着图像似乎在叠加层下"移动").我将以固定速率在视口中滚动视图以提供平滑运动,并且叠加将提供对视口内某个位置的引用.从概念上讲,考虑在视口中滚动的大型地图,以及具有不移动的矩形的视口(相对于视口本身),该矩形标记可以基于某些用户动作放大的区域.

我假设(但尚未确认)ScrollPane实现有效地处理View的渲染(来自后备存储,不必为每个新的部分曝光重新绘制整个View(甚至ViewPort)),因此不希望覆盖paint()方法.

我看过LayerPane,虽然没有掌握它,但似乎这是一种蛮力的方法.ScrollPane是SplitPane的一个组件,将被移动/调整大小.我希望我必须使用绝对定位手动维护ViewPort和LayerPane之间的正确关系.我远不是GUI设计和实现方面的专家,而且我确信我缺少从有经验的人会知道的明显到模糊和优雅的可能性.

我愿意接受任何建议,而不仅仅是我开始的道路.我是否(我可以)在我的SplitPane中添加JPanel作为一个组件,然后在LayerPane的不同图层上添加一个LayerPane到包含我的ScrollPane和覆盖(另一个​​JPanel)的那个?ScrollPane中是否有功能直接支持此功能?我查看了Java Swing教程和API文档,但还没有看到任何内容.

谢谢.

更新:

感谢您的链接,trashgod.这比我预期的要容易得多.不需要LayerPane,GlassPane,基于xor的合成......我不知道为什么我没有尝试重写JViewport.paint()来绘制我的叠加层 - 但是使用下面的代码我验证了概念将给我我正在寻找的东西.只需使用JViewport的子类,它就可以完成我想要的操作(在这种情况下,当图像在下面滚动时,在Viewport的中心覆盖一个矩形).我不是GUI专家,Java API非常广泛; 我不知道你们怎么把这一切都放在脑海里 - 但是谢谢!

class MyViewport extends JViewport {
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.setPaint(Color.BLACK);
        g2.drawRect(getWidth()/4,getHeight()/4,getWidth()/2,getHeight()/2);
    }
}
Run Code Online (Sandbox Code Playgroud)

java graphics swing overlay scrollpane

8
推荐指数
1
解决办法
3455
查看次数

使用libgdx,如何将文本和图像添加到ScrollPane?

这是一段代码片段.

itemList = new List(skin, "ariel.32.white");
String[] tmpInv = new String[b+1];
tmpInv[0] = "<Empty>";
a++;
for (Entry<String, String> entry : inventoryItems.entrySet()) {
    tmpInv[a] = entry.getKey(); 
    a++;
    //String key = entry.getKey();
    //Object value = entry.getValue();
    // ...
}
Arrays.sort(tmpInv);

itemList.setItems(tmpInv);

inventoryPane  = new ScrollPane(itemList, skin);
Run Code Online (Sandbox Code Playgroud)

这是我得到的,它工作正常.我想在每个项目前面添加描述性图标,但我似乎无法让它工作.我还需要一些方法来获取添加后所选内容的名称.目前我用

itemlist.getSelectedIndex();
Run Code Online (Sandbox Code Playgroud)

结果

inline image scrollpane libgdx scene2d

8
推荐指数
1
解决办法
3985
查看次数

如何在JavaFX中设置滚动窗格的单位增量?

JavaFX中的ScrollBar类包含一个用于设置单位增量的属性,这就是我所追求的 - 但是我无法找到如何获取此ScrollBar,或者从ScrollPane类中设置其他方式的单位增量!我认为我必须遗漏一些明显的东西 - 我该如何实现这一目标?

java javafx scrollpane javafx-2

7
推荐指数
2
解决办法
4057
查看次数

JavaFx 8 - 相对于鼠标位置缩放/缩放ScrollPane

我需要相对于鼠标位置放大/缩小滚动窗格.

我目前通过将我的内容包装在一个组中,并缩放组本身来实现缩放功能.我使用自定义数据透视创建一个新的Scale对象.(枢轴设置为鼠标位置)

这适用于组的初始比例为1.0的情况,但之后的缩放不会在正确的方向上缩放 - 我相信这是因为当缩放组时相对鼠标位置会发生变化.

我的代码:

@Override
public void initialize(URL location, ResourceBundle resources) {

    Delta initial_mouse_pos = new Delta();

    anchorpane.setOnScrollStarted(event -> {
        initial_mouse_pos.x = event.getX();
        initial_mouse_pos.y = event.getY();
    });

    anchorpane.setOnScroll(event -> {
        double zoom_fac = 1.05;
        double delta_y = event.getDeltaY();

        if(delta_y < 0) {
            zoom_fac = 2.0 - zoom_fac;
        }

        Scale newScale = new Scale();
        newScale.setPivotX(initial_mouse_pos.x);
        newScale.setPivotY(initial_mouse_pos.y);
        newScale.setX( content_group.getScaleX() * zoom_fac );
        newScale.setY( content_group.getScaleY() * zoom_fac );

        content_group.getTransforms().add(newScale);

        event.consume();
    });
}

private class Delta { double x, y; }
Run Code Online (Sandbox Code Playgroud)

如何在不同的缩放级别获得正确的鼠标位置?是否有一种完全不同的方式来缩放ScrollPane更容易?

java javafx zoom scrollpane javafx-8

7
推荐指数
1
解决办法
5984
查看次数

如何在Java AWT ScrollPane中使用我的触控板进行水平鼠标滚轮滚动

像许多现代鼠标和触控板一样,我的笔记本电脑支持垂直和水平滚动.一旦你习惯它,这是一个令人上瘾的功能.我只是希望我的Java应用程序通过触控板/鼠标滚轮支持水平滚动,但在我搜索它的任何地方似乎都不可能在Java中.

我真的希望有人告诉我,我在某种程度上做错了,这个功能已被请求行为:http://bugs.sun.com/bugdatabase/view_bug.do?video_id = 6440198

无法做这个简单的事情实际上是我正在努力的应用程序的交易破坏者.事实上,对于我能想象的任何应用程序!我在Java后端投入了一些时间,所以我真的很想找到一个看似简单的解决方案.

问题是我可以做些什么来实现这种行为?原始操作系统级别的事件是否被java暴露给我,那么我是否需要从头开始编写这个?

import java.awt.*;

public class ScrollExample extends Canvas {

    public void paint(Graphics g) {

        g.setColor(Color.green);
        g.fillOval(0,0,400, 400);

    }

    public static void main(String[] args) {

        ScrollExample b = new ScrollExample();
        Frame f = new Frame ("Scroll Example");

        ScrollPane scroller = new ScrollPane (ScrollPane.SCROLLBARS_ALWAYS);
        scroller.add(b,"Center");
        f.setPreferredSize(new Dimension(500,500));
        f.add ("Center",scroller);
        f.pack();
        f.show();

    }

}
Run Code Online (Sandbox Code Playgroud)

Swing示例适用于水平和垂直滚动

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

public class ScrollExample extends JPanel { 

    public void paint(Graphics g) {

        super.paint(g);

        g.setColor(Color.green);
        g.fillOval(0,0,400, 400);

    } …
Run Code Online (Sandbox Code Playgroud)

java awt scrollpane mousewheel

6
推荐指数
1
解决办法
1996
查看次数

JavaFX如何滚动ScrollPane使节点位于视图端口的中间?

我必须用显示当前时间的线创建时间轴.我正在使用AnchorPane添加放置在ScrollPane中的行.我需要模拟1天,滚动窗格宽度为(2880px,每60px为1小时).我的限制是(前一天12小时,第二天12小时).移动我的线路工作正常.

我需要做的就是在视口中间设置一行并在其下移动内容.对于移动线我使用这种方法:

scrollPane.setHvalue( line.getStartX() - anchorPane.width); 
Run Code Online (Sandbox Code Playgroud)

它工作"很好".内容正在移动,但线路正在向前发展.我在线路为0:00(位置设置为0.25)时开始,当位置为(0.75)24 h时结束.我也正在缩放我的时间轴Y轴

/* where line position is calculate by scale, scale is x2, x3, x4.... */
scrollPane.setHvalue( line.getStartX() - anchorPane.width * scale); 
Run Code Online (Sandbox Code Playgroud)

请看imgs几小时:0:00,12:00,24:00 ...正确的行位置仅在12:00 ...如何修改功能来设置行的位置?

0:00小时 12:00 24:00

javafx scrollpane

6
推荐指数
1
解决办法
2032
查看次数