使用Sea Glass外观定制JPanel

时间:2015-03-05 09:29:39

标签: java swing jpanel look-and-feel seaglass

我有JFrameJPanel。我已将JPanel添加到JFrame。我正在使用Sea Glass Look and Feel。我的JPanel通过以下代码创建了标题和边框:panel.setBorder(BorderFactory.createTitledBorder("Titled Panel"));

问题是当我使用Sea Glass Look and Feel运行我的程序时,边框没有显示;但当我禁用它时,边框将显示为我想要的。 这是我的代码:

import com.seaglasslookandfeel.*;

public class SeaGlassLF extends JFrame {

    SeaGlassLF() {
    this.setPreferredSize(new java.awt.Dimension(300, 300));
    this.setSize(300, 300);
    this.setLayout(new java.awt.BorderLayout());
    this.setVisible(true);

    JPanel panel = new JPanel();
    panel.setPreferredSize(new java.awt.Dimension(200, 200));
    panel.add(new javax.swing.JButton("Click Me"));
    panel.setBorder(BorderFactory.createTitledBorder("Titled Panel"));

    this.add(panel, BorderLayout.CENTER);

}

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            try {
                UIManager
                        .setLookAndFeel("com.seaglasslookandfeel.SeaGlassLookAndFeel");
            } catch (Exception e) {
                e.printStackTrace();
            }

            SeaGlassLF sg = new SeaGlassLF();

        }
    });
   }
  }

Qsn。可能是什么原因以及我们如何解决这个问题?

以下是显示程序输出的图像。

  1. NO 海玻璃外观(边框可用 - 红色箭头指示)。
  2. enter image description here

    1. 海洋玻璃外观(无边框)。
    2. enter image description here

2 个答案:

答案 0 :(得分:3)

    在Seaglas L& F中
  • 需要覆盖titlePossition的可能性, -

  • e.g。代码行

panel.setBorder(BorderFactory.createTitledBorder(null, 
     "Titled Panel", TitledBorder.DEFAULT_JUSTIFICATION, 
     TitledBorder.TOP, new java.awt.Font("Tahoma", 1, 12)));

生成了我(通过使用seaglasslookandfeel-0.1.7.3.jar)

enter image description here

答案 1 :(得分:1)

嗯,这是一种相当蛮力的方式:

UIManager.getDefaults().put("TitledBorder.border", BorderFactory.createLineBorder(Color.black));

但我确信(我希望!)有更优雅的解决方案。

每个外观都可以设置这些值。我想这个外观和感觉的作者已经决定,有条纹的边框不适合他们的风格,所以隐藏了它们。