有没有办法在 BorderLayout 中移动 JPanel?
Is there a way of moving JPanel in BorderLayout?
我正在使用 BorderLayout
作为框架(第一个 "caught" 我在 tuts 中引起注意的框架)和 FlowLayout
作为标签(我认为适合的标签)我做了什么),结果显示如下:
我的objective是把“2*1”往下推一点,排序"center"。
我环顾四周,发现很多人说使用空布局,但后来又说这不是最佳选择(即使我的 window 不可调整大小),我找到的另一个解决方案是使用布局组合(除非我误解了)。
问题是最重要的一个,如果不是,那么什么才是最好的选择? (以下是使这个 window 的代码(减去 vars 和其他方法,以简化可视化)。
public Frame() {
super("Jogo de Multiplicar!");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
setSize(300, 200);
setResizable(false);
getContentPane().setBackground(pink);
mensagem = new TransparentPanel();
operacao = new TransparentPanel();
//added stuff in mensagem and operacao
add(operacao);
add(mensagem, BorderLayout.SOUTH);
}
您可以使用 MigLayout
作为您唯一的 LayoutManager。它非常强大,通常提供其他经理所做的一切。
有了这个,将组件居中非常简单:
public class MultiplyExample extends JFrame{
private static final long serialVersionUID = 1L;
JLabel testLabel = new JLabel("2*2 = 4");
public MultiplyExample(){
super("Example");
setBounds(300, 50, 200, 200);
// Set the MigLayout, so that columns and then rows get centered
setLayout(new MigLayout("center, center"));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(testLabel);
}
public static void main(String[] args) {
JFrame testFrame = new MultiplyExample();
testFrame.setVisible(true);
}
}
结果:
这是 MigLayout
必须提供的演示:
http://www.miglayout.com/swingdemoapp.jnlp
这是一个快速入门指南:
http://www.miglayout.com/QuickStart.pdf
如果你有使用BorderLayout
,你可以把你的组件放在另一个面板上,然后使用BorderLayout.CENTER
把这个放在中间:
pane.add(button, BorderLayout.CENTER);
I looked around and found a lot of people saying to use a null layout
避免该建议。每当我在论坛中看到该建议时,通常都会收到论坛中更有经验的用户的反对票。
My objective is to push the "2*1" a little bit down, to sort of "center" it.
如果您只想在顶部添加更多 space,那么您可以使用 Border
:
operacao.setBorder( new EmptyBorder(...) );
阅读 How to Use Borders 上的 Swing 教程部分了解更多信息。
如果你想让它真正居中,你可以使用 BoxLayout
:
Box box = Box.createVerticalBox();
box.add( Box.createVerticalGlue() );
box.add( topPanel );
box.add( Box.createVerticalGlue() );
box.add( bottomPanel );
该教程还有一个关于 How to Use BoxLayout
的部分。搜索 table 的内容。
我正在使用 BorderLayout
作为框架(第一个 "caught" 我在 tuts 中引起注意的框架)和 FlowLayout
作为标签(我认为适合的标签)我做了什么),结果显示如下:
我的objective是把“2*1”往下推一点,排序"center"。
我环顾四周,发现很多人说使用空布局,但后来又说这不是最佳选择(即使我的 window 不可调整大小),我找到的另一个解决方案是使用布局组合(除非我误解了)。
问题是最重要的一个,如果不是,那么什么才是最好的选择? (以下是使这个 window 的代码(减去 vars 和其他方法,以简化可视化)。
public Frame() {
super("Jogo de Multiplicar!");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
setSize(300, 200);
setResizable(false);
getContentPane().setBackground(pink);
mensagem = new TransparentPanel();
operacao = new TransparentPanel();
//added stuff in mensagem and operacao
add(operacao);
add(mensagem, BorderLayout.SOUTH);
}
您可以使用 MigLayout
作为您唯一的 LayoutManager。它非常强大,通常提供其他经理所做的一切。
有了这个,将组件居中非常简单:
public class MultiplyExample extends JFrame{
private static final long serialVersionUID = 1L;
JLabel testLabel = new JLabel("2*2 = 4");
public MultiplyExample(){
super("Example");
setBounds(300, 50, 200, 200);
// Set the MigLayout, so that columns and then rows get centered
setLayout(new MigLayout("center, center"));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(testLabel);
}
public static void main(String[] args) {
JFrame testFrame = new MultiplyExample();
testFrame.setVisible(true);
}
}
结果:
这是 MigLayout
必须提供的演示:
http://www.miglayout.com/swingdemoapp.jnlp
这是一个快速入门指南:
http://www.miglayout.com/QuickStart.pdf
如果你有使用BorderLayout
,你可以把你的组件放在另一个面板上,然后使用BorderLayout.CENTER
把这个放在中间:
pane.add(button, BorderLayout.CENTER);
I looked around and found a lot of people saying to use a null layout
避免该建议。每当我在论坛中看到该建议时,通常都会收到论坛中更有经验的用户的反对票。
My objective is to push the "2*1" a little bit down, to sort of "center" it.
如果您只想在顶部添加更多 space,那么您可以使用 Border
:
operacao.setBorder( new EmptyBorder(...) );
阅读 How to Use Borders 上的 Swing 教程部分了解更多信息。
如果你想让它真正居中,你可以使用 BoxLayout
:
Box box = Box.createVerticalBox();
box.add( Box.createVerticalGlue() );
box.add( topPanel );
box.add( Box.createVerticalGlue() );
box.add( bottomPanel );
该教程还有一个关于 How to Use BoxLayout
的部分。搜索 table 的内容。