0

次のようなものがあります。

代替テキスト

ご覧のとおり、「Blambo」は不透明な赤い背景の JLabel です。ラベルは、1 ピクセルの黒っぽい境界線で囲まれた小さな灰色のバーの上にあります。赤色の警告を、それが置かれているバーにもっとうまく合わせたいと思います。つまり、2 ピクセル短くして 1 ピクセル下に移動するか、同じ単一ピクセルの境界線を上下のみに適用する必要があります。このコードは他のラベルと共有されているため、これら 2 つのうち、最初のものが望ましいと思われます。

問題のコード:

bgColor = Color.red;
textColor = Color.white;
setBackground(bgColor);
setOpaque(true);
// This line merely adds some padding on the left
setBorder(Global.border_left_margin);   
setForeground(textColor);
setFont(font);
super.paint(g);

その境界は次のように定義されます。

public static Border border_left_margin = new EmptyBorder(0,6,0,0);
4

2 に答える 2

0

コードを見なければ、すでに知っていることや試したことがあることを知ることは困難です。

次のように、コンポーネントの境界線を明示的に設定します。

myLabel.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 0, Color.BLACK));

現在、JLabels はかなり複雑な獣であり、(オプションの) アイコンを測定するためのコードが多く、多くの一般的なケースに合わせてレイアウトを計画しています。JComponent をサブクラス化して、独自の非常に単純なラベルを作成する方がよい場合があります。

于 2009-11-06T17:01:21.370 に答える
0

次のように、ラベルの新しい境界線を作成できます。

編集:別の回答であなたのコメントを見た後、私はあなたが望むものを与える複合境界線を作成しました。

import java.awt.Color;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.Border;

/**
 * @author Savvas Dalkitsis
 */
public class Test1 {

    public static void main(String[] args) {
        JFrame f = new JFrame("Test");
        JLabel c = new JLabel("Hello");
        Border b = BorderFactory.createCompoundBorder(
                BorderFactory.createMatteBorder(2, 0, 2, 0, Color.black),
                BorderFactory.createEmptyBorder(0, 100, 0, 0));
        c.setBorder(b);
        f.getContentPane().add(c);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);
    }

}
于 2009-11-06T17:01:57.757 に答える