簡體   English   中英

JSeparator虛線樣式

[英]JSeparator dashed style

我在我的 java swing 應用程序中使用 JSeparator。 正常執行使分隔符正常行; 但我需要的是分隔符應該是虛線(就像我們創建虛線邊框一樣)。 有什么辦法可以做到嗎?

謝謝

您可以使用以下代碼段創建虛線。

import java.awt.Container;
import java.awt.Graphics;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSeparator;

public class SeparatorSample {
    public static void main(String args[]) {
        JFrame f = new JFrame("JSeparator Sample");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container content = f.getContentPane();
        content.setLayout(new GridLayout(0, 1));
        JLabel above = new JLabel("Above Separator");
        content.add(above);
        JSeparator separator = new JSeparator() {
            private static final long serialVersionUID = 1L;

            public void paintComponent(Graphics g) {
                for (int x = 0; x < 300; x += 15)
                    g.drawLine(x, 0, x + 10, 0);
            }
        };
        content.add(separator);
        JLabel below = new JLabel("Below Separator");
        content.add(below);
        f.setSize(300, 100);
        f.setVisible(true);
    }
}

要創建自定義JSeparator ,您可以覆蓋paint()方法BasicSeparatorUI ,討論了這里 ,並用畫虛線的線Stroke ,說明這里

trashgod的回答稍作修改,我發現使用paintComponent()而不是paint()對我來說效果很好:

Stroke stroke = new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, new float[] { 5.0f },
        0.0f);
JSeparator separator = new StrokedSeparator(stroke);
// Add separator to container

這是 StrokedSeparator class:

import java.awt.BasicStroke;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;

import javax.swing.JSeparator;

public class StrokedSeparator extends JSeparator {

    private static final long serialVersionUID = 1L;

    private Stroke stroke;

    public StrokedSeparator() {
        this(new BasicStroke(1F), HORIZONTAL);
    }

    public StrokedSeparator(int orientation) {
        this(new BasicStroke(1F), orientation);
    }

    public StrokedSeparator(Stroke stroke) {
        this(stroke, HORIZONTAL);
    }

    public StrokedSeparator(Stroke stroke, int orientation) {
        super(orientation);
        this.stroke = stroke;
    }

    @Override
    public void paintComponent(Graphics g) {
        Dimension s = getSize();

        Graphics2D graphics = (Graphics2D) g;
        graphics.setStroke(stroke);

        if (getOrientation() == JSeparator.VERTICAL) {
            graphics.setColor(getForeground());
            graphics.drawLine(0, 0, 0, s.height);

            graphics.setColor(getBackground());
            graphics.drawLine(1, 0, 1, s.height);
        } else // HORIZONTAL
        {
            graphics.setColor(getForeground());
            graphics.drawLine(0, 0, s.width, 0);

            graphics.setColor(getBackground());
            graphics.drawLine(0, 1, s.width, 1);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM