简体   繁体   English

使用Java中的JPanel绘制矩形

[英]Drawing rectangles with JPanel in Java

What's wrong with the following code? 以下代码有什么问题? Why isn't the rectangle displaying 为什么不显示矩形

public class SynapsePermanencesViewer {

public JPanel createContentPane(Region region) {
JPanel synapseLayer = new JPanel();
synapseLayer.setLayout(null);

Column[][] columns = region.getColumns();

JPanel redSquare = new JPanel();
Color color = new Color(128, 0, 0);
redSquare.setBackground(color);
int squareLength = 50;
redSquare.setSize(squareLength, squareLength);

// calculate the correct location
redSquare.setLocation(150, 150); // <==== This square isn't displaying WHY???

synapseLayer.setOpaque(true);
return synapseLayer;
}

public SynapsePermanencesViewer(Region region) {
JFrame frame = new JFrame("Synapse Permanences Viewer");

frame.setContentPane(this.createContentPane(region));

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
Region parentRegion = new Region("parentRegion", 2, 2, 1, 20, 1);
Region childRegion = new Region("childRegion", 4, 4, 1, 20, 3);
RegionToRegionConnect connectType = new RegionToRegionRectangleConnect();
connectType.connect(childRegion, parentRegion, 0, 0);

SynapsePermanencesViewer object = new SynapsePermanencesViewer(parentRegion);
}

} }

  1. You don't add the redSquare to the synapseLayer. 您不会将redSquare添加到synapseLayer。

  2. Even if you did add the square it would not show because the synapseLayer uses a null layout so the size of that panel is (0, 0). 即使您确实添加了它也不会显示的方块,因为synapseLayer使用空布局,因此该面板的大小为(0,0)。 So when you pack the frame there is nothing to show. 因此,当您打包框架时,没有任何东西可以显示。

Don't use a null layout!!! 不要使用null布局! Let a layout manager determine the size of the panels for you so that the pack() method will work properly. 让布局管理器为您确定面板的大小,以便pack()方法正常工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM