我使用的是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);
}
所以我正在搜索如何做到这一点,我找到了这个链接https://docs.oracle.com/javase/tutorial/uiswing/components/border.html但它不包含我需要的括号,也找到了这个https://team.mumie.net/mumie/mathletfactory_lib_apidocs/net/mumie/mathletfactory/display/noc/matrix/MatrixBorder.html#MatrixBorder(java.awt.组件,int),但我没有找到任何例子如何使用它。
根据nIcE cOw对我上述评论之一的回答,您需要创建自己的CustomBorder
类,该类扩展AbstractBorder
,并重写其paintBorder()
方法来绘制括号的每个部分。
在本例中,我将此任务分为三部分,上/下/左
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;
}
}
我还并没有完成OP的期望输出中显示的行和列数,我将把它省略掉,因为这个问题只与方括号有关
本文向大家介绍Python中矩阵创建和矩阵运算方法,包括了Python中矩阵创建和矩阵运算方法的使用技巧和注意事项,需要的朋友参考一下 矩阵创建 1、from numpyimport *; a1=array([1,2,3]) a2=mat(a1) 矩阵与方块列表的区别如下: 2、data2=mat(ones((2,4))) 创建一个2*4的1矩阵,默认是浮点型的数据,如果需要时int类型,可以使用
着色器语言中通过关键字mat2、mat3、mat4分别声明一个2x2矩阵、3x3矩阵、4x4矩阵,通过内置函数mat2()、mat3()、mat4()分别创建一个2x2矩阵、3x3矩阵、4x4矩阵。 关键字 数据类型 mat2 2x2矩阵,4个元素 mat3 3x3矩阵,9个元素 mat4 4x4矩阵,16个元素 声明变量 关键子mat4声明一个4x4矩阵 mat4 matrix4; 构造函数赋
我在查看一些代码时发现了以下内容: 有什么区别呢?顺便说一句:我对矩阵很陌生
主要内容:引用矩阵中的元素,删除矩阵中的一行或一列,矩阵运算,以下是纠正/补充内容:矩阵是数字的二维数组。 在MATLAB中,可以通过在每行中输入元素来创建一个矩形,以逗号或空格分隔数字,并使用分号标记每一行的结尾。 例如,创建一个矩阵 - MATLAB将执行上述语句并返回以下结果 - 引用矩阵中的元素 要引用矩阵的第行和第列中的元素,可以这样书写 - 例如,要引用矩阵的第行和第列中的元素,如上一节所述,可以这样书写 - MATLAB执行上述语句并返回以下结果 - 要引用第列中的
matlib.empty()函数返回一个新的矩阵,而不初始化元素。 该函数接受以下参数。 其中: import numpy.matlib import numpy as np print np.matlib.empty((2,2)) # 填充为随机数据 输出如下: [[ 2.12199579e-314, 4.24399158e-314] [ 4.24399158e-314, 2.121
本文向大家介绍SVG 矩阵,包括了SVG 矩阵的使用技巧和注意事项,需要的朋友参考一下 示例 将转换矩阵应用于多边形: 每个点(x,y)都将通过以下方式进行转换matrix(a, b, c, d, e, f): 结果等于