使用 Sea Glass 外观自定义 JPanel

Customizing JPanel with Sea Glass Look and Feel

我有一个 JFrame 和一个 JPanel。我已将我的 JPanel 添加到我的 JFrame 中。我正在使用 Sea Glass 外观和感觉。我的 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 Sea Glass 外观和感觉(边框可用 - 由红色箭头指向)。

  1. 具有 Sea Glass 外观和感觉(无可用边框)。

好吧,这是一种相当蛮力的方法:

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

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

每个外观都可以设置这些值。我想这种外观的作者已经决定内衬边框不符合他们的风格,所以隐藏了它们。

  • 在 Seaglas L&F 中需要覆盖 titlePossition、-

  • 的位置
  • 例如代码行

.

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)这个

.