- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在构建一个包含几个选项卡式面板的应用程序。在它们中的每一个上,我都想放置一组由边界彼此分开的组件。它看起来像:
|- 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();
}
});
}
}
这是相同的输出:
关于java - 如何用边框包围 Java Swing 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12838978/
我想在页面中放置这样一个栏: [ Angular -l][变量][装饰][变量][ Angular -r] “可变”间隔部分应该可以调整大小,但最终,周围的容器(包含所有这些)应该规定最大宽度,并且上
我想写一个正则表达式,这样我只匹配没有用方括号括起来的第一个数字。 例如asdadsas,*&(*&(*2asdasd*U(*&*()&(*3应该匹配 2(没有方括号) 和 asdadsas,*&(*
我尝试尝试这些 iostream 奇怪的行为。 int value = 2; cout > 2) > 的性质。在该语言从 C 发展的早期,这些运算符专门用作所谓的“位移位”运算符,其中 > 会将位向右
这个问题在这里已经有了答案: How to use Objective-C classes with names which are keywords in Swift (1 个回答) 关闭 7 年
我看不到问题,我没有对参数进行编码,我只是将变量从一个页面传递到另一个页面。 这是页面 A: if (isset($_SESSION['loggedIn'])==1){ ?> '">Edit 这
我有一个静态工厂类,如果在调用之前没有进行初始化,它会抛出异常。我不明白为什么 Eclipse 对我大喊大叫,因为我在工厂中抛出了异常(它要求我在 try/catch 中包围抛出异常),但在另一个类中
我有一些代码: public static void a() throws NumberFormatException { return; } public stati
我看不到问题,我没有对参数进行编码,我只是将变量从一个页面传递到另一个页面。 这是页面 A: if (isset($_SESSION['loggedIn'])==1){ ?> '">Edit 这
This question already has answers here: Using explicitly numbered repetition instead of question mar
包围
在我的网站上,我有一些图像与其余内容存储在相同的 SQL 单元格中。当我加载包含图像的页面并且 PHP 回显“文章”单元格时,图像会自动包含在段落标签中,这不是我想要的。有什么办法可以防止这种情况发生
我想弄清楚为什么我的 JSON 响应被方括号括起来。我正在使用 ASP.NET Web API 和 Angular。我在想这就是我的 Angular 代码没有打印到 HTML 的原因。 namespa
在eclipse中我们可以用try/catch包围一段代码。我想用 if 语句包围一段代码。有没有快捷键。选择代码块后按 Ctrl + 1 没有提示用 If 包围。 最佳答案 突出显示代码块,按 Al
我有一个用 Go 实现的 Web 服务,它从外部服务返回一个 JSON 结构。返回对象后,它看起来像这样: {"otherServiceInfoList":[],"action... 我的 Go 网络
我在一个网站上工作,客户想要类似这样的东西:http://www.csszengarden.com/?cssfile=202/202.css有几个叠加层附加到屏幕的边缘,而中心的文本以原始浏览器滚动条
我想圈出 react-native-vector 图标。我在样式中添加了一个边框半径,但它对所有设备都没有帮助,而且每个图标的行为都不同。 react 原生矢量图标的链接: https://
使用文本节点的以下值... MatcH one MatcHer two MarcH three 如何使用 java matcher.find() 创建以下输出? MatcH one MatcHer t
我有一个读取文件的非常简单的程序。 eclipse 要求我添加 throws 声明或用 try catch 包围。哪一个是“合适的”。以及如果我已经在方法级别 try catch ,为什么还必须拥有其
在我们从“psd2html”服务获得的代码中,我看到围绕 div 标签的内容有很多跨度。 我知道 span 和 div 之间的区别,但我不明白为什么代码看起来像这样: Forgot pass
我有一个 HTML 代码,有 3 个输入字段:
我正在尝试替换字符串中单词 true 的所有实例,例如在 "true && 0 || 1" 中. 这些字符串可能包含变量值,标记为#{varname} .我不想替换被 #{ 包围的实例和 } . 例子
我是一名优秀的程序员,十分优秀!