- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我的应用程序使用 Java Swing,我想利用 JViewport 在端口“后面”显示一些类似 Canvas 的面板的片段。但不知何故视口(viewport)永远不会定位它的观点,所以一定有我在做的事情。我做错了什么,为什么这段代码不起作用?
以下是我在更大、更复杂的范围内所做工作的示例。
public class MyApp
{
// THIS IS A TEMPORARY TEST TO GET VIEWPORT WORKING
public static void main(String[] args)
{
JFrame frame = new JFrame();
JViewport viewport = new JViewport();
viewport.setOpaque(true);
viewport.setBackground(Color.GRAY);
frame.add(viewport, BorderLayout.CENTER);
JPanel canvas = new JPanel(null);
canvas.setBackground(Color.CYAN);
viewport.setView(canvas);
viewport.setViewSize(new Dimension(500, 500));
viewport.setExtentSize(new Dimension(300, 300));
viewport.setPreferredSize(new Dimension(300, 300));
// item one
JLabel label = new JLabel("This is a 32x32 box");
label.setOpaque(true);
label.setBackground(Color.GREEN);
label.setIcon(Sprites.BOX2.getSprite());
label.setBounds(0, 0, 200, 32); // position upper left, 200 wide
label.setHorizontalAlignment(SwingConstants.LEFT);
canvas.add(label);
// item two
JLabel label2 = new JLabel("This is a 32x32 wall");
label2.setOpaque(true);
label2.setBackground(Color.ORANGE);
label2.setIcon(Sprites.WALL1.getSprite());
label2.setBounds(300, 468, 200, 32); // position lower right, 200 wide
label2.setHorizontalAlignment(SwingConstants.RIGHT);
label2.setHorizontalTextPosition(SwingConstants.LEFT);
canvas.add(label2);
// this should scroll the canvas to the left and up, so the box becomes invisible and the wall visible
viewport.setViewPosition(new Point(200, 200));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
结果是“ Canvas ”只是停留在 0,0,它永远不会像我使用 setViewPostition() 那样移动到 200,200。无论空布局管理器如何,它的内容都完美定位。为了简单起见,我只是将 Canvas 写成 JPanel,但它实际上是一个复杂的 JLayeredPane。
最佳答案
你的情况有几个问题:
null
-layout/absolute positioning:停止这样做......永远。这是一种糟糕的做法,一种非常糟糕和令人讨厌的习惯,它总是导致同一个问题:成堆的问题。setPreferredSize()
:使用适当的 LayoutManager
或覆盖 getPreferredSize()
Scrollable
并且 getPreferredScrollableViewportSize()
将返回 new Dimension(300, 300)
(目标视口(viewport)范围大小)关于java - JViewport 是不是定位了它的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16083285/
我最近一直在摆弄java,正在尝试开发一个小游戏。问题是,我正在使用的 JViewport 没有更新。当在视口(viewport)上调用重绘方法时,视口(viewport)在正确的位置闪烁,并且视口(
我使用默认布局管理器(使用 viewport.setViewPosition)获得了一个正确滚动的 JViewport,但是当我调用 setLayout(null) 时,它不再有效。 有什么想法吗?
我正在使用 JViewport 查看一些数据,并且我希望将标题行放置在 JViewport 的底部而不是顶部。 视口(viewport)永远不会水平滚动,因此滚动条的位置问题不是问题。 我怀疑我必须制
我尝试集成 http://java-swing-tips.blogspot.co.uk/2008/06/mouse-drag-auto-scrolling.html进入我的程序,但它似乎行为不当,我不
我知道 setViewportBorder(),但我想知道您是否可以设置视口(viewport)的边界而不是仅仅用空边框填充。我想要实现的是为页眉和页脚组件创建空间,内联增加和减少按钮。
我一直在尝试了解 JViewports 并尝试使用它。我一直在用这位先生的class ,它只是扩展了 JViewport 类。 如果我想在实现 JPanel 类的 6480*4860 对象中间设置视口
我无法提供 SSCCE,因为我无法在大型应用程序之外重复错误。 但这里是一个片段和输出: if (vp != null) { try {
目前我有一个漂亮的 JViewport,其中设置了一个 Jlabel 并将其用作 View 。我想知道是否可以使用分层 Jlabels 作为视口(viewport)的 View 。 IE:我想将新的
我正在为我的应用程序使用 Java Swing,我想利用 JViewport 在端口“后面”显示一些类似 Canvas 的面板的片段。但不知何故视口(viewport)永远不会定位它的观点,所以一定有
我有一个带有 JScrollPane 的 JTable。 scrollPane 视口(viewport)有些东西我不明白...我现在在表中选择第 1000 行,它上面的许多行在屏幕上不可见。现在,当我
我已经编写了如下定义的 MouseListener,这样我就可以移动 JButton 来重新排序 JPanel 中的组件。 JPanel 位于 JScrollPane 中,因此当添加多个组件时,它们可
我有一个 JFrame,其中包含一个 JScrollPane,其中包含一个 JPanel。JPanel 包含一堆 JTextArea。我正在向其中加载大量文本(大约 8k-10k 个字符)。 布局工作
我在 JScrollPane 中有一个自定义文本组件。当文本为空并且没有滚动条时,我可以看到所有文本。但是,当滚动条变得可见时,一些文本会“隐藏”在这些滚动条后面。也许我可以监听 JViewPort
我的滚动 Pane 存在透明度/滚动问题。据我所知,文档没有解决这种行为。 这是我的透明文本面板的代码: textArea.setOpaque(false); scrollPane.s
我相信 JViewport 确实可以与 JPanel 一起使用,但是当我构建一个扩展 JPanel 的新类时,程序似乎忽略了 JViewport。我不知道我是否做错了什么,所以这是我进行的测试,仍然得
我是一名优秀的程序员,十分优秀!