Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 矩阵方括号_Java_Swing_Border - Fatal编程技术网

Java 矩阵方括号

Java 矩阵方括号,java,swing,border,Java,Swing,Border,我使用的是JavaSwing,我需要显示一个带有方括号的矩阵(普通方括号,就像我们在数学中使用的跨越多行的方括号),矩阵大小不是固定的,它取决于输入 下面是我用来显示矩阵的代码: public static void printMatrix(String[][] matrix) { String output = ""; for (int x = 0; x < matrix.length; x++) { output += Array

我使用的是JavaSwing,我需要显示一个带有方括号的矩阵(普通方括号,就像我们在数学中使用的跨越多行的方括号),矩阵大小不是固定的,它取决于输入

下面是我用来显示矩阵的代码:

public static void printMatrix(String[][] matrix) {
        String output = "";
        for (int x = 0; x < matrix.length; x++) {
            output += Arrays.toString(matrix[x]) + "\n";
        }
        JOptionPane.showMessageDialog(null, output, "Matrix",
                JOptionPane.INFORMATION_MESSAGE);
    }
publicstaticvoidprintmatrix(字符串[][]矩阵){
字符串输出=”;
对于(int x=0;x
输出:

但我需要一个大的连接方括号,如下所示:

因此,我正在搜索如何做到这一点,我找到了这个链接,但它不包含我需要的括号,我也找到了这个,但我没有找到任何关于如何使用它的示例。

基于我上面的一条评论中的nIcE cOw,您需要创建自己的
CustomBorder
类,该类扩展并重写其方法以绘制括号的每个部分

在本例中,我将此任务分为3部分,即两个括号的顶部/底部/左侧和右侧

internalGap
变量是内容和边框之间的空间

以下是一些输出的屏幕截图:

包含2、6和10个元素

产生上述输出的代码为:

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Insets;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.AbstractBorder;

public class EquationMatrixBorder {

    private JPanel pane;
    private CustomBorder customBorder;
    private static final int ROWS_AND_COLS = 1;

    private void displayGUI() {
        JFrame frame = new JFrame("Custom Border Example");

        customBorder = new CustomBorder(Color.RED, 15, 10);
        pane = new JPanel();
        
        pane.setLayout(new GridLayout(ROWS_AND_COLS, ROWS_AND_COLS, 15, 15));
        //Used to fill the grid, not relevant to question
        Random random = new Random();
        for (int i = 0; i < ROWS_AND_COLS; i++) {
            for (int j = 0; j < ROWS_AND_COLS; j++) {
                int r = 0;
                if (j % 2 == 0) {
                    r = random.nextInt(2);
                } else {
                    r = random.nextInt(2) - 1;
                }
                pane.add(new JLabel(String.valueOf(r)));
            }
        }
        
        pane.setBorder(customBorder);
        frame.add(pane);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                new EquationMatrixBorder().displayGUI();
            }
        };
        EventQueue.invokeLater(runnable);
    }
}

class CustomBorder extends AbstractBorder {
    
    private Color color;
    private int gap;
    private int bracketsTopAndBottom = 10;
    private int internalGap;
    
    public CustomBorder(Color color, int gap, int internalGap) {
        this.color = color;
        this.gap = gap;
        this.internalGap = internalGap;
    }
    
    @Override
    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
        super.paintBorder(c, g, x, y, width, height);
        Graphics2D g2d = null;
        if (g instanceof Graphics2D) {
            g2d = (Graphics2D) g;
            g2d.setColor(color);
            g2d.setStroke(new BasicStroke(3));
            
            //top part of brackets
            g2d.drawLine(x + gap, y + gap, x + gap + bracketsTopAndBottom, (y +  gap));
            g2d.drawLine(width - x - gap - bracketsTopAndBottom, y + gap, width - gap - x, (y +  gap));
            
            //bottom part of brackets
            g2d.drawLine(x + gap, height - gap, x + gap + bracketsTopAndBottom, height - gap);
            g2d.drawLine(width - x - gap - bracketsTopAndBottom, height - gap, width - gap - x, height - gap);
            
            //left and right part of brackets
            g2d.drawLine(x + gap, y + gap, x + gap, height - gap);
            g2d.drawLine(width - x - gap, y + gap, width - x - gap, height - gap);
        }
    }
    
    @Override
    public Insets getBorderInsets(Component c) {
        return getBorderInsets(c, new Insets(gap, gap, gap, gap));
    }
    
    @Override
    public Insets getBorderInsets(Component c, Insets insets) {
        insets.left = insets.top = insets.right = insets.bottom = gap + internalGap;
        return insets;
    }
}
import java.awt.BasicStroke;
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.EventQueue;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.GridLayout;
导入java.awt.Insets;
导入java.util.Random;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.border.AbstractBorder;
公共类等式{
私人JPanel窗格;
私人边界;
私有静态final int ROWS_和_COLS=1;
私有void displayGUI(){
JFrame=新JFrame(“自定义边框示例”);
customBorder=新的customBorder(颜色:红色,15,10);
pane=newjpanel();
setLayout(新的GridLayout(行和列,行和列,15,15));
//用于填充网格,与问题无关
随机=新随机();
for(int i=0;i<行和列;i++){
对于(int j=0;j<行和列;j++){
int r=0;
如果(j%2==0){
r=随机。下一个(2);
}否则{
r=随机。下一个(2)-1;
}
添加(新JLabel(String.valueOf(r));
}
}
窗格.订单(自定义边框);
框架。添加(窗格);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
公共静态void main(字符串[]args){
Runnable Runnable=新的Runnable(){
@凌驾
公开募捐{
新方程MatrixOrder().displayGUI();
}
};
invokeLater(可运行);
}
}
类CustomBorder扩展了AbstractBorder{
私人色彩;
私人内部差距;
专用内括号stop和bottom=10;
私人内部差距;
公共自定义边框(颜色、内部间距、内部间距){
这个颜色=颜色;
这个.gap=gap;
this.internalGap=internalGap;
}
@凌驾
公共空白画框(组件c、图形g、整数x、整数y、整数宽度、整数高度){
超级。油漆边框(c、g、x、y、宽度、高度);
Graphics2D g2d=null;
if(图形的g实例2D){
g2d=(图2d)g;
g2d.setColor(彩色);
g2d.设定行程(新基本行程(3));
//支架顶部
g2d.拉线(x+间隙,y+间隙,x+间隙+支架止动块和底部,(y+间隙));
g2d.绘图线(宽度-x-间隙-支架止动块和底部,y+间隙,宽度-间隙-x,(y+间隙));
//支架底部
g2d.拉线(x+间隙,高度-间隙,x+间隙+支架止动块和底部,高度-间隙);
g2d.抽绳(宽度-x-间隙-支架止动块和底部,高度-间隙,宽度-间隙-x,高度-间隙);
//括号的左右部分
g2d.拉线(x+间隙,y+间隙,x+间隙,高度-间隙);
g2d.绘图线(宽度-x-间隙,y+间隙,宽度-x-间隙,高度-间隙);
}
}
@凌驾
公共插图getBorderInsets(组件c){
返回getBorderInsets(c,新的Insets(gap,gap,gap,gap));
}
@凌驾
公共插图getBorderInsets(组件c,插图插图插图){
insets.left=insets.top=insets.right=insets.bottom=间隙+内部间隙;
返回插图;
}
}


我还没有完成OP的期望输出中显示的行数和列数,因为这个问题只与方括号有关,您尝试了什么?这与Swing库有什么关系?另外,到目前为止您尝试了什么?听起来像是渲染问题。你想过在浏览器框架中使用LaTeX JavaScript引擎吗?我的代码没有给我一个连接的括号,所以我在搜索如何做到这一点,我找到了这个链接,但它不包含我需要的括号,我也找到了这个,但我没有找到任何关于如何使用它的示例。该应用程序基于Swing,这就是为什么我需要使用Swing来实现这一点。我没有尝试过LaTeX,我将对此进行搜索。请尝试发布您负责的swing代码-然后我们将有可能帮助您。我们需要的是应该有效但不起作用的投入。