Tag: jsplitpane

将JSplitPane与AWT组件一起使用

我有一个AWTcanvas,我无法将其转换为Swing组件(它来自VTK )。 我希望在JSplitPane中显示一些这些canvas。 我已经读到了在Java中混合重量和重量轻的组件,并且知道这是一个痛苦的屁股,但我没有选择。 如果我将AWTcanvas包装在JPanel中,然后将其放在拆分窗格上,则拆分窗格根本不起作用。 但是,如果我将AWTcanvas放在JPanel中,然后放在JScrollPane内部,然后在JSplitPane上放置那些滚动窗格,则拆分窗格会起作用,但AWTcanvas组件不会正确resize。 我失去了关于如何在移动JSplitPane的分隔符时使AWTcanvas组件正确resize。 我可以抓住分频器移动操作并在当时的AWTcanvas上操作,但我不知道该怎么做。 我已经尝试调用invalidate()然后validate()然后重绘(),但这不起作用。 有任何想法吗? 这是问题的一个例子 import javax.swing.*; import java.awt.*; public class SwingAWTError { public static void main(String[] args) { Canvas leftCanvas = new Canvas(); Canvas rightCanvas = new Canvas(); leftCanvas.setBackground(Color.RED); rightCanvas.setBackground(Color.BLUE); JPanel leftPanel = new JPanel(); JPanel rightPanel = new JPanel(); leftPanel.setLayout(new BorderLayout()); rightPanel.setLayout(new BorderLayout()); leftPanel.add(leftCanvas, BorderLayout.CENTER); rightPanel.add(rightCanvas, BorderLayout.CENTER); […]

如果用户移动了分隔符的位置,如何让JSplitPane保持相同的比例位置

在调整容器大小时,我无法让JSplitPane保持相同的相对位置。 如果假设拆分窗格具有固定位置,则一切正常。 我可以使用下面显示的代码使分隔符位置保持接近相同的相对位置,但是在调整JFrame大小时分隔符向左移动。 如果JFrame缓慢resize,则移位更大。 如果JFrame变小或变大,则向左移动。 如何让分频器保持在完全相同的比例位置? 这就是GUI最初的样子。 这是几次调整后的样子。 这就是代码的样子。 此尝试基于此处提供的信息: JSplitPane精确分裂50% JSplitPane SetDividerLocation问题 https://docs.oracle.com/javase/tutorial/uiswing/components/splitpane.html import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JSplitPane; public class Example { public static void main(String[] args) { new Example().showGui(); } private void showGui() { // create the jframe JFrame jFrame = new […]

JSplitPane:有没有办法显示/隐藏其中一个窗格?

我有一个带有两个组件A和B的JSplitPane,但有时我希望能够隐藏B,以便满足以下任一条件: 组件A和B在JSplitPane中可见 只有组件A在JSplitPane占用的空间中可见 有没有办法做到这一点?

当OneTouchExpandable设置为true时,如何以编程方式设置JSplitPane以隐藏右/底组件?

在JSplitPane ,您有setOneTouchExpandable方法,它为您提供了2个按钮,可以快速完全隐藏或完整显示JSplitPane 。 我的问题是你如何以编程方式“点击” JSplitPane上的隐藏按钮? 我可能错误地解释了自己。 我希望splitpane在开始时只显示2个组件中的一个(这就是我点击的意思)。 这有效: import javax.swing.*; class SplitPaneDefault { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JSplitPane sp = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, new JTree(), new JTree()); sp.setOneTouchExpandable(true); sp.setDividerLocation(0.0); JOptionPane.showMessageDialog(null, sp); } }); } } 但用1.0替换0.0并不会隐藏正确的组件。 这是我的问题!

如何设置JSplitPane-Divider折叠/展开状态?

我有一个带有JSplitPane的JFrame,它是OneTouchExpandable。 我想记住JFlitPane在JFrame上的最后一个Divider位置处理并在重新打开JFrame时恢复Position。 它运行良好,但是如果用户通过oneTouchExpandable UI-Widget扩展一侧,那么我只存储处理中的’int’-Position并再次设置’int’-Position,结果是JFrame调整JSplitPane-Divider的大小跳转到折叠的Component preferredSize。 如何获取/设置崩溃/展开状态? 编辑 现在:resize-Behavior是正常的,但它与首次打开时的行为并不完全相同 – 因为现在我没有MinimumDividerLocation。 我想要SnapIn但是更多的是崩溃状态。 public class SplitPaneState { public static void main( String[] args ) { SwingUtilities.invokeLater( new Runnable() { @Override public void run() { new SplitPaneState().createAndSowGUI(); } }); } private int position = -1; private Dimension size = new Dimension( 500, 300 ); private void createAndSowGUI() { […]

使JPanel手动resize

我有一个带BorderLayout的JFrame作为布局管理器。 在南边界,我有一个JPanel ,我希望这个JPanel的大小可以由用户调整,即用户可以点击边框的边缘并将其向上拖动以使其更大。 有什么方法你知道我能做到吗?

在JSplitPane上设置分隔符位置不起作用

我正在尝试设置JSplitPane的分隔符位置但似乎不起作用。 这是一个SSCCE: import java.awt.Color; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JSplitPane; public class JSplitProblem extends JFrame { public JSplitProblem(){ JPanel upperPanel = new JPanel(); upperPanel.setLayout(new BoxLayout(upperPanel, BoxLayout.X_AXIS)); JPanel leftPanel = new JPanel(); leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.Y_AXIS)); JPanel red = new JPanel(); red.setBackground(Color.red); leftPanel.add(red); JPanel rightPanel = new JPanel(); rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.Y_AXIS)); JPanel blue = new […]