java - 创建部分为虚线和部分为实线的边框

标签 java swing border

我创建了一个表格,其中有一个区域包含所有单元格,其中顶部边框是一条实线,而底部和右侧则是虚线。我想出了如何单独使其不绘制边框的一侧,所以我认为我可以将虚线和实线边框组合在一起,而在另一边框需要绘制的地方则是空的。取而代之的是,它们仅在顶部绘制两个图形。这是我的代码:

Border empty = BorderFactory.createEmptyBorder(0, -1, -1, -1);
Border dashed = BorderFactory.createDashedBorder(Color.BLUE, 5, 5);
Border empty2 = BorderFactory.createEmptyBorder(-1, -1, -1, 0);
Border line = BorderFactory.createLineBorder(Color.black);
Border compound1 = new CompoundBorder(empty, line);
Border compound2= new CompoundBorder(empty2,dashed);
Border compound = new CompoundBorder(compound1,compound2);

这是我的完整代码,如果您想运行它以查看我在说什么:
* Class to create the specified table
 * @author CGordo01
 *
 */
public class WordDocumentTable extends JPanel{
    Font f;
    // Holds all the label, is used for resizing
    ArrayList<JLabel> allLabels= new ArrayList<JLabel>();
    /**
     * Creates the table
     */
    public WordDocumentTable(){

        // Sets the layout to a gridBagLayout
        this.setLayout(new GridBagLayout());
        f = new Font("SansSerif", Font.PLAIN, 12);
        //Adds a component listener
        this.addComponentListener(new ComponentAdapter() {
            @Override
            /**
             * If the component is resized makes the text fit the dimensions
             */
            public void componentResized(ComponentEvent e) {
                // Boolean used to see if the text width fits the component.
                Boolean fits= false;

                // value used to divide the components height by.
                double divider = 16;

                // Makes the font size scale according to the width and height.
                while(fits == false){
                    f= f.deriveFont((float) (e.getComponent().getHeight()/divider));
                    for (int i = 0; i<allLabels.size();i++){
                        allLabels.get(i).setFont(f);
                        //System.out.println(divider);
                        if(allLabels.get(i).getGraphics().getFontMetrics().stringWidth(allLabels.get(i).getText())>allLabels.get(i).getWidth()){
                            fits = false;
                            divider++;
                            break;
                        }
                        else{
                            fits = true;
                        }

                    }
                }
            }
        });
        makeLeftCells();

        makeMidCells();

        makeLongCells();

        makeTopCells();

    }
    /**
     * Creates the cells that are in between widths of the other cells
     */
    private void makeMidCells() {
        GridBagConstraints midCells = new GridBagConstraints();
        midCells.fill= GridBagConstraints.BOTH;
        midCells.weightx=1;
        midCells.weighty=1;
        midCells.gridwidth=4;
        midCells.gridy=9;
        midCells.gridx=1;

        JLabel b = new JLabel();
        b.setText(".Batch Total    " + "    985124  " + "      Patches ");
        b.setName("Previous Batch Total");
        b.setBackground(Color.white);
        b.setBorder(new LineBorder(Color.black));
        b.setOpaque(true);
        b.setFont(f);
        this.add(b,midCells);

        midCells.gridx=5;
        JLabel b2 = new JLabel();
        b2.setText(".Shift Total    " + "    985124  " + "      Patches ");
        b2.setName("Previous Shift Total");
        b2.setBackground(Color.white);
        b2.setBorder(new LineBorder(Color.black));
        b2.setOpaque(true);
        b2.setFont(f);
        this.add(b2,midCells);

        midCells.gridy=12;
        midCells.gridx=1;

        JLabel c = new JLabel();
        c.setText(".Batch Total    " + "    985124  " + "      Patches ");
        c.setName("Batch Total");
        c.setBackground(Color.white);
        c.setBorder(new LineBorder(Color.black));
        c.setOpaque(true);
        c.setFont(f);
        this.add(c,midCells);

        midCells.gridx=5;
        JLabel c2 = new JLabel();
        c2.setText(".Shift Total    " + "    985124  " + "      Patches ");
        c2.setName("Shift Total");
        c2.setBackground(Color.white);
        c2.setBorder(new LineBorder(Color.black));
        c2.setOpaque(true);
        c2.setFont(f);
        this.add(c2,midCells);

        allLabels.add(b);
        allLabels.add(b2);
        allLabels.add(c);
        allLabels.add(c2);
    }

        /**
         * Creates the cells which span much of the grid
         */
        private void makeLongCells() {
            GridBagConstraints longCells = new GridBagConstraints();
        longCells.fill= GridBagConstraints.BOTH;
        longCells.weightx=1;
        longCells.weighty=1;
        longCells.gridwidth=8;
        longCells.gridx=1;
        longCells.gridy=7;

        JLabel b = new JLabel();
        b.setText("Finish the Batch");
        b.setName("Previous Shift Goal");
        b.setBackground(Color.white);
        b.setBorder(new LineBorder(Color.black));
        b.setOpaque(true);
        b.setFont(f);
        this.add(b,longCells);

        longCells.gridy=8;

        JLabel c = new JLabel();
        c.setText("<html><p> blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah</p></html>");
        c.setName("Previous Shift Notes");
        c.setBackground(Color.white);
        c.setBorder(new LineBorder(Color.black));
        c.setOpaque(true);
        c.setFont(f);
        this.add(c,longCells);

        longCells.gridy=10;

        JLabel d = new JLabel();
        d.setText("Shift Goal");
        d.setName("Shift Goal");
        d.setBackground(Color.white);
        d.setBorder(new LineBorder(Color.black));
        d.setOpaque(true);
        d.setFont(f);
        this.add(d,longCells);

        longCells.gridy=11;

        JLabel e = new JLabel();
        e.setText("Shift Notes");
        e.setName("Shift Goal");
        e.setBackground(Color.white);
        e.setBorder(new LineBorder(Color.black));
        e.setOpaque(true);
        e.setFont(f);
        this.add(e,longCells);

        longCells.gridy=13;

        JLabel f2 = new JLabel();
        f2.setText("");
        f2.setName("WO Schedule Note");
        f2.setBackground(Color.white);
        f2.setBorder(new LineBorder(Color.black));
        f2.setOpaque(true);
        f2.setFont(f);
        this.add(f2,longCells);

        longCells.gridy=14;

        JLabel g = new JLabel();
        g.setText("");
        g.setName("Supervisor");
        g.setBackground(Color.white);
        g.setBorder(new LineBorder(Color.black));
        g.setOpaque(true);
        g.setFont(f);
        this.add(g,longCells);

        allLabels.add(b);
        allLabels.add(c);
        allLabels.add(d);
        allLabels.add(e);
        allLabels.add(f2);
        allLabels.add(g);

    }
    /**
     * Creates a 8x7 grid of small cells 
     */
    private void makeTopCells() {
        GridBagConstraints topCells = new GridBagConstraints();
        topCells.fill= GridBagConstraints.BOTH;
        topCells.weighty=1;
        topCells.weightx=1;
        for (int i = 0; i < 8; i++)
        {
            topCells.gridx=i+1;
            for (int j = 0; j < 7; j++)
            {
                topCells.gridy=j;
                JLabel b = new JLabel();
                b.setText("" + i + j);
                b.setName("" + i + j);
                b.setOpaque(true);
                b.setFont(f);
                if(j==0){
                    b.setBackground(new Color(242,242,242));
                }
                else{
                    b.setBackground(Color.white);
                }
                if (j==0){
                    b.setBorder(new LineBorder(Color.black));
                }
                else{
                    Border empty = null;
                    Border compound = null;
                    Border dashed = BorderFactory.createDashedBorder(Color.BLUE, 5, 5);
                    if(j==1){
                    empty = BorderFactory.createEmptyBorder(-1, 0, -1, -1);
                    }
                    else{
                        empty = BorderFactory.createEmptyBorder(0, 0, -1, -1);
                    }
                    if(j!=4){
                    compound = new CompoundBorder(empty, dashed);
                    }
                    else{
                        empty = BorderFactory.createEmptyBorder(0, -1, -1, -1);
                        Border empty2 = BorderFactory.createEmptyBorder(-1, -1, -1, 0);
                        Border line = new LineBorder(Color.black);
                        Border compound1 = new CompoundBorder(empty, line);
                        Border compound2= new CompoundBorder(empty2,dashed);
                        compound = new CompoundBorder(compound1,compound2);

                    }
                    b.setBorder(compound);
                }

                allLabels.add(b);
                this.add(b,topCells);
            }
        }

    }

    private void makeLeftCells() {
        GridBagConstraints leftCells = new GridBagConstraints();

        leftCells.fill = GridBagConstraints.BOTH;
        leftCells.gridx = 0;
        leftCells.gridy = 0;
        leftCells.weightx=2;
        leftCells.weighty=1;

        JLabel titleBlock = new JLabel();
        titleBlock.setOpaque(true);
        titleBlock.setText("Delta Hydrogel A");
        titleBlock.setForeground(Color.white);
        titleBlock.setBackground(new Color(79,129,189));
        titleBlock.setBorder(new LineBorder(Color.black));
        titleBlock.setFont(f);

        this.add(titleBlock, leftCells);

        leftCells.gridy = 1;
        leftCells.gridheight=3;

        JLabel tallBlock1 = new JLabel();
        tallBlock1.setOpaque(true);
        tallBlock1.setText(".Day Shift");
        tallBlock1.setForeground(Color.black);
        tallBlock1.setBackground(new Color(242,242,242));
        tallBlock1.setBorder(new LineBorder(Color.black));
        tallBlock1.setFont(f);
        this.add(tallBlock1, leftCells);



        JLabel tallBlock2 = new JLabel();
        tallBlock2.setOpaque(true);
        tallBlock2.setText(".Night Shift");
        tallBlock2.setForeground(Color.black);
        tallBlock2.setBackground(new Color(242,242,242));
        tallBlock2.setBorder(new LineBorder(Color.black));
        tallBlock2.setFont(f);
        leftCells.gridy = 4;

        this.add(tallBlock2, leftCells);

        JLabel shortBlock1 = new JLabel();
        shortBlock1.setOpaque(true);
        shortBlock1.setText(".Previous Shift Goal");
        shortBlock1.setForeground(Color.black);
        shortBlock1.setBackground(new Color(242,242,242));
        shortBlock1.setBorder(new LineBorder(Color.black));
        shortBlock1.setFont(f);
        leftCells.gridy = 7;
        leftCells.gridheight=1;

        this.add(shortBlock1, leftCells);

        JLabel shortBlockTall = new JLabel();
        shortBlockTall.setOpaque(true);
        shortBlockTall.setText(".Previous Shift Notes");
        shortBlockTall.setForeground(Color.black);
        shortBlockTall.setBackground(new Color(242,242,242));
        shortBlockTall.setBorder(new LineBorder(Color.black));
        shortBlockTall.setFont(f);
        leftCells.gridy = 8;
        leftCells.ipady=50;

        this.add(shortBlockTall, leftCells);

        JLabel shortBlock2 = new JLabel();
        shortBlock2.setOpaque(true);
        shortBlock2.setText(".Previous Shift Output");
        shortBlock2.setForeground(Color.black);
        shortBlock2.setBackground(new Color(242,242,242));
        shortBlock2.setBorder(new LineBorder(Color.black));
        shortBlock2.setFont(f);
        leftCells.gridy = 9;
        leftCells.ipady=0;


        this.add(shortBlock2, leftCells);

        JLabel shortBlock3 = new JLabel();
        shortBlock3.setOpaque(true);
        shortBlock3.setText(".Shift Goals");
        shortBlock3.setForeground(Color.black);
        shortBlock3.setBackground(new Color(184,204,228));
        shortBlock3.setBorder(new LineBorder(Color.black));
        shortBlock3.setFont(f);
        leftCells.gridy = 10;
        leftCells.ipady=0;


        this.add(shortBlock3, leftCells);


        JLabel shortBlock4 = new JLabel();
        shortBlock4.setOpaque(true);
        shortBlock4.setText(".Shift Notes");
        shortBlock4.setForeground(Color.black);
        shortBlock4.setBackground(new Color(184,204,228));
        shortBlock4.setBorder(new LineBorder(Color.black));
        shortBlock4.setFont(f);
        leftCells.gridy = 11;
        leftCells.ipady=0;


        this.add(shortBlock4, leftCells);

        JLabel shortBlock5 = new JLabel();
        shortBlock5.setOpaque(true);
        shortBlock5.setText(".Output");
        shortBlock5.setForeground(Color.black);
        shortBlock5.setBackground(new Color(184,204,228));
        shortBlock5.setBorder(new LineBorder(Color.black));
        shortBlock5.setFont(f);
        leftCells.gridy = 12;


        this.add(shortBlock5, leftCells);

        JLabel shortBlock6 = new JLabel();
        shortBlock6.setOpaque(true);
        shortBlock6.setText(".WO Schedule Note");
        shortBlock6.setForeground(Color.black);
        shortBlock6.setBackground(new Color(184,204,228));
        shortBlock6.setBorder(new LineBorder(Color.black));
        shortBlock6 .setFont(f);
        leftCells.gridy = 13;

        this.add(shortBlock6, leftCells);

        JLabel shortBlock7 = new JLabel();
        shortBlock7.setOpaque(true);
        shortBlock7.setText(".Supervisor");
        shortBlock7.setForeground(Color.black);
        shortBlock7.setBackground(new Color(184,204,228));
        shortBlock7.setBorder(new LineBorder(Color.black));
        shortBlock7.setFont(f);
        leftCells.gridy = 14;

        this.add(shortBlock7, leftCells);

        allLabels.add(titleBlock);
        allLabels.add(tallBlock1);
        allLabels.add(tallBlock2);
        allLabels.add(shortBlock1);
        allLabels.add(shortBlockTall);
        allLabels.add(shortBlock2);
        allLabels.add(shortBlock3);
        allLabels.add(shortBlock4);
        allLabels.add(shortBlock5);
        allLabels.add(shortBlock6);
        allLabels.add(shortBlock7);



    }
    public static void main (String[] args)
    {
        JFrame J = new JFrame();
        J.setSize(1600,900);
        J.setVisible(true);


        WordDocumentTable wdc= new WordDocumentTable();

        J.setContentPane(wdc);
        J.setVisible(true);
        J.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}

最佳答案

好吧,我不确定我是否理解它,但是我使它起作用了。我将用于虚线的空白边框中的第一个参数更改为-2。我的推理是-1不起作用,让我们尝试-2。

Border empty = BorderFactory.createEmptyBorder(0, -1, -1, -1);
Border dashed = BorderFactory.createDashedBorder(Color.BLUE, 5, 5);
Border empty2 = BorderFactory.createEmptyBorder(-2, -1, -1, 0);
Border line = BorderFactory.createLineBorder(Color.black);
Border compound1 = new CompoundBorder(empty, line);
Border compound2= new CompoundBorder(empty2,dashed);
Border compound = new CompoundBorder(compound1,compound2);

关于java - 创建部分为虚线和部分为实线的边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31166279/

相关文章:

java - 显示文本字段中的文本,但在组合框中选择时不会更改字体

Android View 在某些设备上的边框问题

java - 在 Java 中为图像添加边框

java - 如果提供了不正确的登录凭据,如何避免 Android 中的 httpsURLConnection.getInputStream() 挂起?

java - 如何从Java中的java.lang类型的对象中获取等效的基本类型?

Java Graphics 2d 避免折线扭曲角

java - 将功能分配给 Jbutton

java - ArrayList 矩形

java - 需要在 JFrame 中使用 JOptionPane.ERROR_MESSAGE 类型的 JDialog

css 括号 - 间距问题