如何在使用BorderFactory创建TitleBorder后从Panel中删除蓝线?

时间:2013-01-30 14:19:26

标签: java swing jpanel border

我创建了一个JPanel,我添加了一个带有BorderFactory的TitleBorder,但它在面板周围显示了一条蓝线。 我想删除这一行。

有什么建议吗?

谢谢

2 个答案:

答案 0 :(得分:3)

  • 从未尝试从TitleBorders AP我提取此值,方法受到保护,或使用UIManager

  • 必须使用LineBorder inside TitleBorder

  • 最简单的语法可以是xxx.setBorder(new TitledBorder(new LineBorder(Color.ORANGE, 1), "label"));,也可以从(例如)Color myPanel.getBackground()

  • Color.ORANGE获取Font
  • 其他选项(可能)

    1. 移动desciption(顶部,底部.....)

    2. 更改Foreground

    3. 更改Colorimport java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.LineBorder; import javax.swing.border.TitledBorder; public class AddComponentsAtRuntime { private JFrame f; private JPanel panel; private JCheckBox checkValidate, checkReValidate, checkRepaint, checkPack; public AddComponentsAtRuntime() { JButton b = new JButton(); b.setBackground(Color.red); b.setBorder(new LineBorder(Color.black, 2)); b.setPreferredSize(new Dimension(600, 10)); panel = new JPanel(new GridLayout(0, 1)); panel.add(b); panel.setBorder(new TitledBorder(new LineBorder(Color.ORANGE, 1), "Add Components At Runtime")); f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(panel, "Center"); f.add(getCheckBoxPanel(), "South"); f.setLocation(200, 200); f.pack(); f.setVisible(true); } private JPanel getCheckBoxPanel() { checkValidate = new JCheckBox("validate"); checkValidate.setSelected(false); checkReValidate = new JCheckBox("revalidate"); checkReValidate.setSelected(false); checkRepaint = new JCheckBox("repaint"); checkRepaint.setSelected(false); checkPack = new JCheckBox("pack"); checkPack.setSelected(false); JButton addComp = new JButton("Add New One"); addComp.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JButton b = new JButton(); b.setBackground(Color.red); b.setBorder(new LineBorder(Color.black, 2)); b.setPreferredSize(new Dimension(600, 10)); panel.add(b); makeChange(); System.out.println(" Components Count after Adds :" + panel.getComponentCount()); } }); JButton removeComp = new JButton("Remove One"); removeComp.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int count = panel.getComponentCount(); if (count > 0) { panel.remove(0); } makeChange(); System.out.println(" Components Count after Removes :" + panel.getComponentCount()); } }); JPanel panel2 = new JPanel(); panel2.add(checkValidate); panel2.add(checkReValidate); panel2.add(checkRepaint); panel2.add(checkPack); panel2.add(addComp); panel2.add(removeComp); return panel2; } private void makeChange() { if (checkValidate.isSelected()) { panel.validate(); } if (checkReValidate.isSelected()) { panel.revalidate(); } if (checkRepaint.isSelected()) { panel.repaint(); } if (checkPack.isSelected()) { f.pack(); } } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { AddComponentsAtRuntime makingChanges = new AddComponentsAtRuntime(); } }); } } 以获取说明)

  • Oracle教程How to Use Borders(CompounBorders)中的更多选项和说明

例如

enter image description here

{{1}}

答案 1 :(得分:3)

蓝线(金属中)是TitledBorder使用的默认边框(如果没有明确指定)。如果你不喜欢默认的f.i,你需要提供另一个边框。一个EmptyBorder:

myPanel.setBorder(BorderFactory.createTitledBorder
    (BorderFactory.createEmptyBorder(), someTitle));