我是Swing的新手但有点努力实现我想做的事情。我想建立一个看起来像这样的屏幕:
我不确定哪种布局最适合这种屏幕。我尝试使用BorderLayout但它永远不会出现。我得到了右下方的按钮,但中间的组件证明是非常具有挑战性的。我知道如何将组件添加到面板上,但我正在努力的区域是如何对齐它们。有时如果我在带有BORDERLAYOUT的面板上添加文本字段,它会占用我不想要的整个面板的整个空间。
我设法让它几乎使用AbsoluteLayout工作,但我怀疑这不是最好的选择,如果我希望屏幕流畅。
setBounds(100, 100, 775, 599);
getContentPane().setLayout(new BorderLayout());
contentPanel.setBackground(SystemColor.control);
contentPanel.setForeground(Color.RED);
contentPanel.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
getContentPane().add(contentPanel, BorderLayout.CENTER);
contentPanel.setLayout(new BorderLayout(0, 0));
{
JPanel topHeadersPanel = new JPanel();
contentPanel.add(topHeadersPanel, BorderLayout.NORTH);
topHeadersPanel.setLayout(new BorderLayout(0, 0));
{
JLabel lblSetSourceRecord = new JLabel("Source customer record:");
lblSetSourceRecord.setFont(new Font("Tahoma", Font.BOLD, 12));
topHeadersPanel.add(lblSetSourceRecord, BorderLayout.WEST);
}
{
JLabel lblSetDestinationRecord = new JLabel("Destination customer record:");
lblSetDestinationRecord.setFont(new Font("Tahoma", Font.BOLD, 12));
topHeadersPanel.add(lblSetDestinationRecord, BorderLayout.EAST);
}
{
JLabel lblSetDestinationRecord = new JLabel("Source customer:");
lblSetDestinationRecord.setFont(new Font("Tahoma", Font.BOLD, 12));
topHeadersPanel.add(lblSetDestinationRecord, BorderLayout.SOUTH);
}
}
{
JPanel buttonPane = new JPanel();
buttonPane.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
buttonPane.setLayout(new FlowLayout(FlowLayout.CENTER));
getContentPane().add(buttonPane, BorderLayout.SOUTH);
{
JPanel panel = new JPanel();
buttonPane.add(panel);
}
{
JButton okButton = new JButton("OK");
okButton.setActionCommand("OK");
buttonPane.add(okButton);
getRootPane().setDefaultButton(okButton);
}
{
JButton cancelButton = new JButton("Cancel");
cancelButton.setActionCommand("Cancel");
buttonPane.add(cancelButton);
}
答案 0 :(得分:5)
尝试将上半部分放在GridLayout
中,包含1行和2列,将其添加到BorderLayout
中作为CENTER,将按钮添加为BorderLayout.BOTTOM
。在上半部分,使用两个面板,一个用于左侧,一个用于右侧。
以下是一些显示此代码的代码(我无法真正复制/粘贴您的示例):
public class MW extends JFrame {
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
private static void createAndShowUI() {
MW x = new MW();
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new GridLayout(1, 2));
JPanel leftPanel = new JPanel();
JLabel srcLabel = new JLabel("Source record:");
leftPanel.add(srcLabel);
JPanel rightPanel = new JPanel();
JLabel dstLabel = new JLabel("Destination record:");
rightPanel.add(dstLabel);
mainPanel.add(leftPanel);
mainPanel.add(rightPanel);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
JButton okButton = new JButton("OK");
buttonPanel.add(okButton);
JButton cancelButton = new JButton("Cancel");
buttonPanel.add(cancelButton);
x.setSize(400, 400);
x.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
x.add(mainPanel, BorderLayout.CENTER);
x.add(buttonPanel, BorderLayout.PAGE_END);
x.setLocationRelativeTo(null);
x.setVisible(true);
}
}
答案 1 :(得分:4)
请看这张图片,我在这里嵌入了可以执行此操作的嵌套组件
在顶层,垂直方框中有两个棕色部分。
然后其中上面的一个有蓝色的网格或水平框。
然后每个都有一个黄色的盒子布局,之间有适当的间距。
接下来是容器并在每个容器中使用适当的布局,最后的组件放在容器内。
有一些工具可以让这更容易。我很久以前就习惯使用NetBeans编辑器。然后我在eclipse的IBM WSAD / RAD版本中使用了编辑器。现在我在MyEclipse中使用Matisse编辑器,如果我需要做这样的布局。
修改强>
刚刚注意到@DaDaDom在外面建议了一些类似于褐色的东西。他喜欢边框布局,中间的上方框和南方的按钮框。那会很有效。
答案 2 :(得分:-1)
我也会使用Group Layout,因为它可以帮助您对齐标签和文本框。