gpt4 book ai didi

java - 如何用边框包围 Java Swing 组件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:02:03 25 4
gpt4 key购买 nike

我正在构建一个包含几个选项卡式面板的应用程序。在它们中的每一个上,我都想放置一组由边界彼此分开的组件。它看起来像:

|- Titled Border 1 ---

[JTextField] [JComboBox] [JTextField] [JComboBox]

|--------

|- Titled Border 2 ---

[JTextField] [JComboBox] [JTextField] [JComboBox]

|--------

... and so forth.

当我尝试简单地向面板添加新边框 Titled Border 2 时,它被添加并覆盖了第一个,但将组件留在了顶部。在某些示例中,我看到在一个框架内定义了许多 JPanel,并且每个面板都有自己的边框。它可能适用于我的情况,但如何添加这些面板以在一个选项卡中显示?

Oracle 的一个教程准确地显示了一个带有多种边框演示的选项卡式 Pane 。当我尝试编辑它并在其中放置一个组件时,它出现在两个边框之间而不是被包围。这是另一个对我来说不成功的选择。

其次,我不使用任何布局管理器,组件位置是固定的,老实说我会保留这个设置。或者您可能建议在这种特定情况下使用任何布局管理器?

对于如何解决这个问题,您有什么提示吗?

编辑:似乎还不允许我附上屏幕截图,但这是负责显示边框的代码部分:

    lenMicro = new JPanel();
lenMicro.setLayout(null);

bGreyLine = BorderFactory.createLineBorder(Color.GRAY, 1, true);
bTitled1 = BorderFactory.createTitledBorder(bGreyLine, "Length (1/2)", TitledBorder.LEFT, TitledBorder.TOP);
lenMicro.setBorder(bTitled1);
bTitled2 = BorderFactory.createTitledBorder(bGreyLine, "Length (2/2)", TitledBorder.LEFT, TitledBorder.TOP);
lenMicro.setBorder(bTitled2);

当最后两行取消注释时,会显示标题为“长度 (2/2)”的边框。

最佳答案

使用 Absolute Positioning 时,您必须为每个组件提供位置,这将成为 View 的一部分。因此,如果不确切地查看您在做什么,就很难预测到底哪里出了问题。虽然使用 Layout Managers , 将减轻您肩上关于在 View 上放置不同组件的巨大负担。

此外,您必须为各个组件设置边框。所以我绝不能假设你添加了一个组件并且它出现在两个边界之间(尽管考虑到你使用绝对定位这一事实,你可能已经为 View 上的所述组件提供了错误的坐标)。请查看此示例代码,它可能会在这方面对您有所帮助:

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

public class BorderExample
{
private JPanel topPanel;
private JPanel centerPanel;
private JPanel bottomPanel;
private int hgap;
private int vgap;
private JTextField tfield1, tfield2;
private JComboBox cbox1, cbox2;
private String[] data = {"One", "Two"};

public BorderExample()
{
hgap = 5;
vgap = 5;
}

private void displayGUI()
{
JFrame frame = new JFrame("Border Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel contentPane = new JPanel();
contentPane.setOpaque(true);
contentPane.setBackground(Color.WHITE);
contentPane.setBorder(
BorderFactory.createEmptyBorder(hgap, hgap, hgap, hgap));
contentPane.setLayout(new BorderLayout(hgap, vgap));

topPanel = new JPanel();
topPanel.setOpaque(true);
topPanel.setBackground(Color.WHITE);
topPanel.setBorder(
BorderFactory.createTitledBorder("Top Panel"));
tfield1 = new JTextField(10);
tfield1.setBorder(
BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(
EtchedBorder.RAISED, Color.GRAY
, Color.DARK_GRAY), "JTextField"));
JPanel comboPanel = new JPanel();
cbox1 = new JComboBox(data);
cbox1.setBorder(
BorderFactory.createTitledBorder("JComboBox"));
topPanel.add(tfield1);
topPanel.add(cbox1);

centerPanel = new JPanel();
centerPanel.setOpaque(true);
centerPanel.setBackground(Color.WHITE);
centerPanel.setBorder(
BorderFactory.createTitledBorder("Center Panel"));
tfield2 = new JTextField(10);
tfield2.setBorder(
BorderFactory.createLoweredBevelBorder());
cbox2 = new JComboBox(data);
cbox2.setBorder(
BorderFactory.createRaisedBevelBorder());
centerPanel.add(tfield2);
centerPanel.add(cbox2);

bottomPanel = new JPanel();
bottomPanel.setOpaque(true);
bottomPanel.setBackground(Color.WHITE);
bottomPanel.setBorder(
BorderFactory.createTitledBorder("Center Panel"));

contentPane.add(topPanel, BorderLayout.PAGE_START);
contentPane.add(centerPanel, BorderLayout.CENTER);
contentPane.add(bottomPanel, BorderLayout.PAGE_END);

frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
new BorderExample().displayGUI();
}
});
}
}

这是相同的输出:

BORDER_EXAMPLE

关于java - 如何用边框包围 Java Swing 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12838978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com