在正y方向上增加jlabel的高度? [英] increase height of a jlabel in positive y direction?

查看:89
本文介绍了在正y方向上增加jlabel的高度?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我设置jLabel的大小时,通常它会向底部增大。如何在y方向上增加高度?

When i setSize of a jLabel, normally it grows towards bottom. How can i increase the height in positive y direction ?

按下init后

After pressing init
Current Result

我的源代码

 private void initActionPerformed(java.awt.event.ActionEvent evt) {                                     


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


    }        

1、2、3是标签名称。
abc是包含所有标签的数组

one,two,three are the label names. abc is an array containing all the labels

推荐答案

您发现Java将正y方向图形视为向下,这与计算机显示器看到y方向一致。解决方案包括:

You're finding out that Java considers positive y direction graphics to be down, which is in keeping with how computer monitors see y direction. Solutions include:


  • 找出最大大小,并从中减去y高度,以找出从何处开始JLabel。
  • >
  • 更好的是,不要使用JLabel,而是使用与上面相同的计算方法绘制JPanel的paintComponent中。

  • Figure out a maximum size, and subtract your y height from it to figure out where to start your JLabel.
  • Even better, don't use JLabels but draw within a JPanel's paintComponent, using the same calculations as above.

例如:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

@SuppressWarnings("serial")
public class GraphicsEg extends JPanel {
    private static final int DATA_COLUMNS = 5;
    private List<JSlider> sliders = new ArrayList<>();
    private DrawPanel drawPanel = new DrawPanel(DATA_COLUMNS);

    public GraphicsEg() {
        JPanel sliderPanel = new JPanel(new GridLayout(1, 0, 5, 5));
        SliderListener sliderListener = new SliderListener();

        for (int i = 0; i < DATA_COLUMNS; i++) {
            JSlider slider = new JSlider(0, 100, 50);
            slider.setPaintLabels(true);
            slider.setPaintTicks(true);
            slider.setPaintTrack(true);
            slider.setMajorTickSpacing(20);
            slider.setMinorTickSpacing(5);
            slider.setOrientation(SwingConstants.VERTICAL);
            slider.addChangeListener(sliderListener);
            sliders.add(slider);
            sliderPanel.add(slider);
        }

        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        setLayout(new BorderLayout(5, 5));
        add(drawPanel, BorderLayout.CENTER);
        add(sliderPanel, BorderLayout.PAGE_END);

        sliderValuesIntoDrawPanel();
    }

    private void sliderValuesIntoDrawPanel() {
        int[] data = new int[DATA_COLUMNS];
        for (int i = 0; i < data.length; i++) {
            data[i] = sliders.get(i).getValue();
        }
        drawPanel.setData(data);
    }

    private class SliderListener implements ChangeListener {
        @Override
        public void stateChanged(ChangeEvent e) {
            sliderValuesIntoDrawPanel();
        }
    }

    private static void createAndShowGui() {
        GraphicsEg mainPanel = new GraphicsEg();

        JFrame frame = new JFrame("GraphicsEg");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}

@SuppressWarnings("serial")
class DrawPanel extends JPanel {
    private static final int PREF_W = 600;
    private static final int PREF_H = 400;
    private static final int PAD = 20;
    private static final Color BORDER_COLOR = Color.BLUE;
    private static final Color COLUMN_COLOR = Color.RED;
    private static final double RELATIVE_COL_WIDTH = 2.0 / 3.0;
    private int dataColumns = 0;
    private int[] data;

    public DrawPanel(int dataColumns) {
        this.dataColumns = dataColumns;
        data = new int[dataColumns];
        setBorder(BorderFactory.createLineBorder(BORDER_COLOR));
    }

    public void setData(int[] data) {
        this.data = data;
        repaint();
    }

    @Override
    public Dimension getPreferredSize() {
        if (isPreferredSizeSet()) {
            return super.getPreferredSize();
        }
        return new Dimension(PREF_W, PREF_H);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        for (int i = 0; i < data.length; i++) {
            drawColumn(g, i, data[i]);
        }
    }

    private void drawColumn(Graphics g, int index, int columnHeight) {
        g.setColor(COLUMN_COLOR);
        int width = (int) (RELATIVE_COL_WIDTH * (PREF_W - 2 * PAD) / dataColumns); 
        int x = PAD + (index * (PREF_W - 2 * PAD)) / dataColumns;
        int height = (columnHeight * (PREF_H - 2 * PAD)) / 100;
        int y = PREF_H - PAD - height;
        g.fillRect(x, y, width, height);
    }
}

这篇关于在正y方向上增加jlabel的高度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆