【问题标题】:JPanel with null layout in JScrollPane - don't see elementsJScrollPane 中具有空布局的 JPanel - 看不到元素
【发布时间】:2016-07-04 16:35:10
【问题描述】:

我想用.setLocation(x, y)设置每个元素的位置

我需要JPanel 中的JScrollPane。但是当我向JPanel 添加组件时,只显示按钮。但不是JLabel

下面的方法是在JFrame构造函数中调用:

private void initGUI_test() {
    this.setSize(950, 700);
    this.setResizable(false);
    this.getContentPane().setLayout(null);

    JScrollPane mainScroll = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    JPanel container = new JPanel();

    mainScroll.setSize(900,500);
    mainScroll.setLocation(0,100);
    mainScroll.setBorder(BorderFactory.createLineBorder(Color.blue));
    mainScroll.add(container);

    container.setLayout(null);
    container.setLocation(0, 0);
    container.setSize(900, 500);

    JLabel rowA = new JLabel();
    rowA.setSize(180, 26);
    rowA.setLocation(10, 100);
    rowA.setText("Row A");

    JButton loadButton = new JButton();
    loadButton.setSize(180, 34);
    loadButton.setLocation(290, 110);
    loadButton.setText("Load file");

    container.add(rowA);
    container.add(loadButton);

    this.getContentPane().add(mainScroll);
}

【问题讨论】:

标签: java swing jpanel jscrollpane null-layout-manager


【解决方案1】:

虽然我完全同意@Frakcool 关于null layout 的观点,但您面临的问题有不同的来源。您不应将组件直接添加到JScrollPane,而应添加到JScrollPaneViewPort

mainScroll.add(container); 应该是mainScroll.getViewport().add(container);

【讨论】:

  • 组件正在显示,谢谢。但是卷轴不起作用。请问您能解决这个问题吗?
  • 只有放弃这种使用null布局的废话才能解决。在那之前,GUI 被破坏了,你对它所做的任何事情都只是为了隐藏根本问题。
  • @AndrewThompson 好的,那么您对绝对布局有何看法?这也错了吗?
  • "..绝对布局?这也错了吗?" Worsenull 布局(在幕后)它是一个 null 布局,但它假装是一个布局管理器,它考虑了典型布局管理器所关心的一切。
  • 好的,所以我必须学习任何基于边框的非直观布局:-( 巨灾...谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
相关资源
最近更新 更多