Create a border that is part of a dashed and solid line

im creates a table and it has one section that has all the cells where the top border is a solid line but the bottom and right points are broken. I figured out how to individually make it not draw one side of the border, so I thought I could just merge the dashed and solid border of the line that is empty where the other should draw. Instead, it just draws as the top line. Here is my code:

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);

      

Here is my complete code in case you want to run it to see what it is talking about:

* 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);
    }

}

      

+3


source to share


2 answers


Well, I'm not sure I understand, but I did it. I changed the first parameter to an empty border, which was for the line stroke to -2. My reasoning was -1 doesn't work, let's try -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);

      

0


source


I think you need to implement your own border.



-1


source







All Articles