2016-03-16 66 views
0

我想创建一个字符表程序,它根据框架的宽度排列3个面板。如果框架不是很宽,我希望垂直排列面板,但如果用户选择使框架更宽,我想将面板水平排列。Java GridLayout如何动态更改网格布局

我也有一个scrollPanel,3个面板排列,所以scrollPanel被添加到一个scrollPane。

我看过帖子说事件监听器可以工作,但其中大部分都是按钮,我需要帧大小在布局更改之前传递一定的阈值。我看到了其他推荐html的帖子,我现在没有看到这是必要的。

enter image description here

因此,在这个图像中的3个板被垂直布置,并且能够通过滚动。

scrollPanel.add(leftPanel); //this is the yellow panel that is being added 
    scrollPanel.add(centerPanel); //this one is farther down 
    scrollPanel.add(rightPanel); //even farther down 
    scrollPanel.setBackground(Color.CYAN); 
    scrollPanel.setLayout(new GridLayout(0, 1)); //so here I would like to have an if statement or event swap the 0 and the 1. 

摘要:

  • 我可以改变动态地根据帧大小的网格布局?

  • 如何监视帧大小更改?事件?如果陈述?

  • 我是否可以对ScrollPane做同样的处理:将水平和垂直滚动条设置为永不出现,取决于面板是垂直还是水平?

+0

这是3-in-one的;是的,你可以动态改变任何事情你试过了吗?? – gpasch

+0

我是否使用if语句来更改gridLayout?是否改变现有的或我需要创建一个新的? –

+0

是的,你可以使用if语句 - 这是你的代码吗?你是否创建了这个代码? - 你可以开始一个新的GridLayout或设置行/列请参阅GridLayout的文档 - – gpasch

回答

0

您可以更改网格布局如下:

gr.setRows(newR); 
gr.setColumns(newC); 
myFrame.validate(); 

其中GR是你的地方创建布局和newR/NEWC是行/列的新号码。

或者你可以说

gr=new GridLayout(newR, newC); 
myFrame.setLayout(gr); 

然后

if(myFrame.getWidth()>thershold) { 

.. do the above 

} 
+0

当我运行这两行:'gr = new GridLayout(newR,newC);''myFrame.setLayout(gr);'将重绘所有我的'GridLayout'中的元素是否适合'newR,newC'? – CapturedTree