2017-01-20 48 views
-1

我想知道是否有办法在创建JPanel时更改JPanel的大小。创建新的JPanel时可以设置JPanel的大小吗?

我的代码如下所示:

add(scoreArea, BorderLayout.NORTH); 
add(gameArea, BorderLayout.CENTER); 
add(new JPanel(), BorderLayout.WEST); 
add(new JPanel(), BorderLayout.EAST); 
add(new JPanel(), BorderLayout.SOUTH); 

我用JPanels创建一个边界,但我想使他们更薄。我是新来的摆动,我只是想知道你是否可以在同一个语句中改变大小,或者如果我必须使JPanel对象和设置大小?

我试过,但它似乎不工作:

add(new JPanel(){ 
    setPreferredSize(new Dimension(10, 300)); 
}, BorderLayout.EAST); 

有没有办法做这样的事情?

编辑:真的downvotes?只是问一个问题,我没有看到downvote的需要。什么是社区。

+2

首先,我建议使用'Border' API ,[如何使用边框](https://docs.oracle.com/javase/tutorial/uiswing/components/border.html),它相当强大。你通常在寻找'setPreferredSize'(虽然我不鼓励使用它),但是你可以创建一个自定义的类或工厂方法来为你做这件事 – MadProgrammer

+2

这是行不通的,'new JPanel(){setPreferredSize new Dimension(10,300));}'but ** this ** will:'new JPanel(){{setPreferredSize(new Dimension(10,300));}}' - 注意双花括号。但话虽如此,更好的解决办法是遵循@ MadProgrammer的建议。 –

+0

*“我用JPanel创建了一个边界..有没有办法做这样的事情?”*使用EmptyBorder - 这不仅是'一种方式',而且确实是最好的方式***创造效果。 –

回答

0

可以使用EmptyBorder类设置JPanel(contaiter)保证金:

EmptyBorder margin = new EmptyBorder(top, left, bottom, right); 
getContentPane().setBorder(border); 

正确的方法来设置者优先尺寸是:

Dimension size = new Dimension(width, height); 
JPanel panel; 

add(panel = new JPanel(), BorderLayout.WEST); 
panel.setPreferredSize(size); 

add(panel = new JPanel(), BorderLayout.EAST); 
panel.setPreferredSize(size); 

add(panel = new JPanel(), BorderLayout.SOUTH); 
panel.setPreferredSize(size);