Tag: jscrollpane

在JScrollPane和JPanel中设置JTable的大小,使用JFrame的大小

我希望表格的宽度与帧的宽度相同,当我调整帧的大小时,表格也需要resize。 我认为JTable setSize()无法正常工作。 你能帮助我吗? import java.awt.Color; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingUtilities; public class Main extends JFrame { public Main() { setSize(400, 600); String[] columnNames = {“A”, “B”, “C”}; Object[][] data = { {“Moni”, “adsad”, 2}, {“Jhon”, “ewrewr”, 4}, {“Max”, “zxczxc”, 6} }; JTable table = new JTable(data, columnNames); JScrollPane tableSP […]

如何使可滚动到jPanel

我正在制作摇摆应用程序。 我的jPanel的高度太高了。 所以我想让这个面板成为可滚动的。以下是我对我的要求的描述。 我在一个jpanel中有四个jpanel我的意思是: JPanel p1=new JPanel(); JPanel p2=new JPanel(); JPanel p3=new JPanel(); JPanel p4=new JPanel(); 我在p1添加了p2, p3, p4 ,如下面的输出: 如上图所示,面板比电脑屏幕高度更高。 所以我想通过滚动在电脑屏幕上显示我面板的所有内容。 我在这里搜索并发现了以下问题: 如何使JPanel可滚动? 如何垂直滚动到JPanel? 但是,答案并没有解决我的问题。

“缩放”后的JScrollPane setViewPosition

我这里的代码是使用MouseAdapter来监听用户在他们想要放大的图像区域周围“绘制”一个框,并计算框与图像的比例。 然后它将图像调整为计算的比例。 这部分有效。 我遇到的问题是,在调整图像大小后,JScrollPane视图看起来好像仍处于同一个左上角位置。 我已经尝试了几种方法似乎已经接近我想要的结果但不完全正确。 这是侦听器,它找到比例并设置位置: import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.Graphics; import java.awt.Point; import javax.swing.JScrollPane; import javax.swing.JViewport; import javax.swing.JComponent; public class DynamicZoom extends MouseAdapter { private Point start; private Point end; private double zoom = 1.0; private JScrollPane pane; private JViewport port; public void mousePressed(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON1) { this.pane = (JScrollPane)e.getSource(); […]

JScrollPane滚动条不可滚动

我有一个类绘制一些非常简单的图形,如线条,圆形和矩形。 线条是动态可扩展的,有时当它们超出分辨率时,如果没有滚动条,就无法看到。 因此,我已将JScrollPane添加到我的JFrame中,但不幸的是,尽管已经调用了布局管理器,但滚动条仍无法滚动。 这就是我所拥有的: – 绘制组件(线,矩形,圆圈)的类 – 设置JFrame / JScrollPane的类 这是我的GUI类的摘录代码: JFrame frame = new JFrame(“GUIFrame”); frame.setLayout(new BorderLayout()); // Layout already set frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); DrawComponent comp = new DrawComponent(); // Reference to class that draw components JScrollPane sp = new JScrollPane(comp, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); sp.setPreferredSize(new Dimension(1000, 1000)); frame.add(sp, BorderLayout.CENTER); frame.setSize(500,500); frame.setVisible(true); 使用上面的代码,我有Java向我展示一个包含我的jcomponents的滚动窗口的JFrame。 我已将滚动条设置为始终如上所示,但它们不可滚动,灰色显示。 正如Andrew所说,我花了一些时间来创建一个SSCCE来反映我正在尝试做的事情: import java.awt.BorderLayout; import […]

试图让JTable + JScrollPane滚动

我已经完成了谷歌搜索并尝试实施了许多关于JTable和JScrollPane的不同解决方案。 以下是我遇到的问题的自包含示例。 我希望能够有这些表的水平滚动条。 非常感谢您的协助: package org.examples; import java.awt.EventQueue; import java.awt.Frame; import java.awt.Rectangle; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JViewport; import javax.swing.ListSelectionModel; import javax.swing.table.AbstractTableModel; public class TableTest extends JFrame { private JTable tableTest_1; private ArrayListStringTableModel tableTestModel_1; private JTable tableTest_2; private ArrayListStringTableModel tableTestModel_2; private JScrollPane tableTestScrollPane_1; private JScrollPane tableTestScrollPane_2; private class ArrayListStringTableModel […]

怎么做一个无限的jscrollpane?

我之前已经实现了拖动滚动,但是创建无限滚动窗格的最佳方法是什么? 当然不会有任何滚动条,我会实现拖动滚动。 我想要做的是在无限的表面上实现动态加载。 编辑 当然它实际上并不是无限的。 我在问如何假装它。

如何将JScrollPane Layout设置为与JTable相同?

Tabel1.setModel(new DefaultTableModel(x,y)); JScrollPane pane = new JScrollPane(Tabel1); 当我运行程序时,滚动窗格看起来比表格大。 如何使滚动窗格布局与表格相同?

paintComponent()正在绘制其他组件

我正在使用基于此答案中的代码的自定义类来绘制形状像讲话泡泡的背景。 每当我调整应用程序窗口的大小足以使组件在顶部或底部突出时,所述组件的轮廓将被绘制在JScrollPane之外的其他组件之上; 在这种情况下是JPanel 。 在左侧图像中,由于组件仍然可见,因此绘制了JScrollPane底部组件的边框; 而在右侧图像中,所提到的组件不再可见,一切看起来都是预期的。 我认为这与我使用JScrollPane来包含组件并因此允许组件在JPanel下滑动这一事实有关。 我该如何防止这种情况? 主要: public class Main { public static void main(String[] args) { JPanel panel = new JPanel(), panelbar = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); panelbar.setLayout(new FlowLayout()); JScrollPane scroll = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); JFrame frame = new JFrame(“”); frame.setLayout(new BorderLayout()); frame.setSize(200, 223); for (int i = 0; i […]

在JScrollPane中更顺畅地滚动

使用JScrollPane的滚动条箭头滚动(或通过设置箭头键的键绑定)将视口移动一个增量,暂停,然后平滑滚动。 我遇到的大多数滚动条表现相同; 有轻微的动作,暂停,然后更快的连续滚动。 有没有办法避免暂停,以便从头到尾滚动顺畅?

如何支持缩放JScrollPane中显示的视图以避免将JScrollBars显示到最小尺寸?

我想要实现的行为是默认情况下以1:1的比例显示视图。 如果其容器变大(由用户动态调整父JFrame的大小),则应缩放视图以适应更大的区域; 如果缩小,视图应缩放以适应较小的区域 – 达到极限。 当小于最小尺寸时,滚动条应与视口一起出现,以支持在最小比例显示的视图周围导航。 我现在有一个运行不良的实现,使用JScrollPane和ComponentListener来确定何时发生resize。 基于新大小,设置新的比例因子以绘制视图以适合(最小比例),设置视图的preferredSize并调用revalidate()。 问题是这会导致“抖动”显示; 当调整超过应用新比例的点以避免显示滚动条时,滚动条会出现,然后消失。 我相信这是因为我的方法是react native的,而不是预测性的。 也就是说,LayoutManager仅查看视图的preferredSize并基于此执行布局。 我正在侦听JScrollPane的大小调整,当它只是太小时才更改视图的preferredSize,然后通过调用revalidate()使容器再次布局。 至少这是我理解它的方式。 我一直在审查JScrollPane,JViewport及其相应的LayoutManagers的源代码。 在这一点上,我正在考虑将一个或多个子类化为更好(预测,导致更平滑的大小调整)实现。这似乎是其他人必须实现的行为。是否有另一种方法来使用现有的Container / LayoutManagers /方法来执行这没有子类化并冒着跨越不同LnF或平台的意外行为的风险? 编辑:我已经攻击了ScrollPaneLayout的原型子类。 它在添加滚动条之前检查视图的最小大小。 这是有效的(因为滚动条在视口小于视图的最小大小之前不会出现,而不是在视口小于视图的首选大小时显示滚动条的原始行为)但是当显示滚动条时,视图会认为它仍然是首选尺寸,而不是最小尺寸。 我也可能不得不破解ViewportLayout类,但这很快就会成为我怀疑会强大的东西。 编辑: 我回到基础并再次尝试了这些建议,并取得了成功。 我尝试重载ScrollPaneLayout和ViewportLayout的默认行为,以及它们之间的交互不是正确的方向。 在我第一次尝试之后,我确信在LayoutManagers完成他们的工作之后,没有办法避免我的“反应”方法的闪烁和不稳定性来修复不正确的大小。 幸运的是,有一种方法可以在没有子类化LayoutManager的情况下完成这项工作 – 如上所述,它是通过实现Scrollable接口(我之前已经正确完成,但没有进行其他更改以使其工作)。 诀窍的确是实现getScrollableTracksViewport(),使其根据视口大小返回true / false。 除了我正在做的其他计算之外,我还没有做的是更新视图的preferredSize。 这是至关重要的一步。 (请注意,我还依赖于侦听ComponentListener.componentResized()通知来触发正确设置返回值所需的计算。function代码如下所示,即可获得帮助。 @SuppressWarnings(“serial”) class ScalingScreenPanel extends JScrollPane { private static final Dimension PREFERRED_SIZE = new Dimension(800,200); private static ScalingScreen sScreen; […]