JScrollPane在JFrame中重叠

时间:2018-01-22 15:06:09

标签: java swing jframe jtable jscrollpane

我无法弄明白,当我在另一台计算机上运行我的程序时,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();

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

不要将ScrollPanes直接添加到JFrame。

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

如果您创建一个Background JPanel并将其添加到容器中,那将会更加漂亮。这应该看起来像这样:

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

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