在JScrollPane中添加两个JTable

3
如何使用setViewPortView()选项将两个JTable并排添加到JScrollPane中,并根据分配给JscrollPane的大小设置表格的大小。

或许可以将这两个 JTable 放入一个 JPanel 中,并使用 MigLayout 作为布局管理器。 - NoDataDumpNoContribution
你有尝试过什么吗? - Halfwarr
1
你应该有两个滚动窗格,一个用于每个表格。否则,你所做的就没有意义。 - Oliver Watkins
3个回答

9
这里这里所示,让每个表格都占据自己的滚动窗格。让一个窗格总是显示滚动条,而另一个则从不显示。然后让两个滚动条共享一个公共BoundedRangeModel

1
+1 可能(我喜欢它)与 AdjustmentListener 一起使用,但是没有人在这里询问同步滚动 :-) - mKorbel

4

JScrollPane 只能包含一个 JComponent,但是您可以将您的表格包装到一个 JPanel 中,并将其添加到 JScrollPane 中,如下所示:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;


public class TestFrame extends JFrame{

    public TestFrame(){
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        init();
        pack();
        setVisible(true);
    }

    private void init() {
      JTable t1 = new JTable(10,5);
      JTable t2 = new JTable(15,5);
      JPanel p = new JPanel(new GridBagLayout());
      GridBagConstraints c = new GridBagConstraints();
      c.anchor = GridBagConstraints.NORTHWEST;
      c.insets =  new Insets(0,5,0,5);
      c.gridy=0;
      c.gridx=0;
      p.add(t1.getTableHeader(),c);
      c.gridx=1;
      p.add(t2.getTableHeader(),c);
      c.gridx=0;
      c.gridy=1;
      p.add(t1,c);
      c.gridx=1;
      p.add(t2,c);
      add(new JScrollPane(p));
    }


    public static void main(String... strings) {
        new TestFrame();
    }

}

enter image description here


2
如何使用setViewPortView()选项将两个JTable并排放置在JScrollPane中,并根据分配给JscrollPane的大小设置表格的大小?
  • JScrollPane只能嵌套一个JComponent

没错,但是两个滚动条可以共享一个公共模型,例如:这个例子 - trashgod
我认为你需要从父JScrollPane中消耗事件,并将这些事件从MouseInfo、Mouse Scroll的Point或SwingUtilities的等效方式重定向到光标下的JScrollPane,否则父级将消耗所有鼠标事件。这也是为什么我对空问题给出非常简短回答的原因之一。 - mKorbel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接