【问题标题】:JScrollPane overlapping in JFrameJScrollPane 在 JFrame 中重叠
【发布时间】:2018-01-22 15:06:08
【问题描述】:

我想不出办法,当我在另一台计算机上运行我的程序时,3 个 JScrollPane 在 JFrame 内部以垂直顺序(北、中、南)放置,相互重叠,使表格不可读 这是 3 个 JscrollPane 中 1 个的代码。

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    frame.setVisible(true);


    DefaultTableModel mod1 = new DefaultTableModel(col,0) {
        public boolean isCellEditable(int row,int column) {
            if(column==0 || column==1 || column==2 || column==3 || column==4 || column==5) {
                return false;
            }else {
                return true;
            }
        }
    };  
    JTable giorno1 = new JTable(mod1);
    giorno1.setFont(new Font("Arial",0,15));
    giorno1.setRowHeight(20);
    giorno1.setAutoCreateRowSorter(true);
    JScrollPane scroll1= new JScrollPane(giorno1);
    scroll1.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
            "Giorno1",TitledBorder.CENTER,
            TitledBorder.TOP));

当我把它们全部放在一个 JFrame 中时的部分

    frame.add(scroll1, BorderLayout.NORTH);
    frame.add(scroll2, BorderLayout.CENTER);
    frame.add(scroll3, BorderLayout.SOUTH);
    frame.validate();

非常感谢任何帮助

【问题讨论】:

标签: java swing jframe jtable jscrollpane


【解决方案1】:

不要将 ScrollPanes 直接添加到 JFrame。

首先,您需要将 LayoutManager(在您的情况下为 BorderLayout)设置为 JFrame 的容器。然后您可以将 ScrollPanes 添加到该 Container。

如果您创建一个 Background JPanel 并将其添加到容器中,那会更有趣。这里应该有点像这样:

JPanel backgroundPane = new JPanel(new BorderLayout());
backgroundPane.add(scrollPane1, BorderLayout.NORTH);
frame.getContentPane().add(backgroundPane);

编辑:我还注意到您在添加面板之前使用了 frame.setVisible(true)。添加面板后使用此方法,因为这也可能导致问题。

【讨论】:

  • JFrame 内容窗格的默认布局管理器是 BorderLayout 。
  • 啊,是的。感谢您指出了这一点!不过在我的例子中不会有什么不同。
猜你喜欢
  • 1970-01-01
  • 2014-05-22
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多