Java 使用jlabel/jpanel绘制图形

Java 使用jlabel/jpanel绘制图形,java,swing,alignment,jlabel,Java,Swing,Alignment,Jlabel,我正在使用JavaSwing构建一个算法可视化工具,我想将jlabel的高度设置为某个元素 int arr[]={6,3,2,13,4}; then JLabel1.setSize(10, arr[0]*5); JLabel2.setSize(10, arr[1]*5); JLabel3.setSize(10, arr[2]*5); JLabel4.setSize(10, arr[3]*5); JLabel5.setSize(10, arr[4]*5); 但当我设置尺寸时,标签会扩展到底部,形

我正在使用JavaSwing构建一个算法可视化工具,我想将jlabel的高度设置为某个元素

int arr[]={6,3,2,13,4};
then
JLabel1.setSize(10, arr[0]*5);
JLabel2.setSize(10, arr[1]*5);
JLabel3.setSize(10, arr[2]*5);
JLabel4.setSize(10, arr[3]*5);
JLabel5.setSize(10, arr[4]*5);
但当我设置尺寸时,标签会扩展到底部,形成一个倒置的条形图。如何在保持JLabel底部对齐的同时增加高度

用于设置值的源代码

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
      abc = new JLabel[]{one,two,three,four,five}; //JlabelArray

      int p = Integer.parseInt(abc[0].getText());
      int q = Integer.parseInt(abc[1].getText());
      int r = Integer.parseInt(abc[2].getText());
      int s = Integer.parseInt(abc[3].getText());
      int t = Integer.parseInt(abc[4].getText());



      one.setSize(20, p*10 );
      one.setBackground(Color.decode("#03A9F4"));
      two.setSize(20, q*10 );
      two.setBackground(Color.decode("#03A9F4"));
      three.setSize(20, r*10 );
      three.setBackground(Color.decode("#03A9F4"));
      four.setSize(20, s*10 );
      four.setBackground(Color.decode("#03A9F4"));
      five.setSize(20, t*10 );
      five.setBackground(Color.decode("#03A9F4"));

      arr = new int[]{p,q,r,s,t}; //number array to be sorted

    }
萨默里
Q:当我设置jLabel的大小时,它通常会向底部增长。如何增加正y方向的高度?

在要添加JLabel的面板上使用不同的布局管理器-我建议使用GridBagLayout。这是一个痛苦的得到正确的,但一旦你明白了它是非常灵活的布局组件。为了您的利益,我会尝试:

JPanel pane = new JPanel(new GridBagLayout());

GridBagConstants c = new GridBagConstants;

c.gridheight = REMAINDER;
c.gridwidth  = 1;
c.fill       = NONE;
c.anchor     = SOUTHWEST;
c.weightx    = 1;
c.weighty    = 0;

pane.add(label1, c);
pane.add(label2, c);
pane.add(label3, c);

c.gridwidth = RELATIVE;

pane.add(label4, c);

c.gridwidth = REMAINDER;

pane.add(label5, c);

除了不同的LayoutManager之外,另一个选项是根本没有LayoutManager(
JPanel.setLayout(null)
)。这样,面板的任何子组件都不会自动调整大小/移动,您必须自己定位和调整大小。这适用于固定大小的容器。这样的解决方案将类似于:

pane.setLayout(null);

pane.add(label1);
label1.setBounds(label1X, label1Y, label1Width, label1Height);

请注意,这也意味着组件不会对其容器的大小更改做出响应-如果需要,则最好使用(可能是自定义的)LayoutManager。

1)要更快获得更好的帮助,请发布或。2) 提供最小尺寸的ASCII艺术或GUI预期布局的简单绘图,如果可以调整大小,更多的宽度和高度。也请张贴您的代码的一部分,确定标签的位置。<代码>绘制图表< /代码>不确定如果使用单独的组件,如这是最好的方法-考虑使用单个JPAND和使用。或者使用图形库(例如)@Berger“请同时发布代码的一部分…”根据定义,MCVE包含了我们编译它并查看问题所需的所有部分,因此它实际上没有“也”的意思。@rama41222
我将对自定义绘制选项进行排序(动画)
甚至更多的激励。“除了不同的LayoutManager之外的另一个选项根本不是LayoutManager…”当然这是一个选项,但不是一个你应该向新手建议的选项。请停止提供布局建议,直到你理解原因。当新手有足够的技能来布局GUI时,他们通常可以将该逻辑放入自定义布局管理器中。