Это не столько вопрос, сколько запрос на подтверждение, что а) я не сумасшедший, и б) я не ошибаюсь в своей математике.Java Swing setBounds() выключен на 1 пиксель
Если я рисую прямоугольник (0,0,10,10), верхний левый пиксель (0,0), нижний правый (10,10). Это означает, что каждая строка фактически занимает 11 пикселей так же, как массив с элементами 0 - 10 имеет длину 11.
setBounds (0,0,10,10), с другой стороны, устанавливает верхний левый пиксель в (0,0) и нижний правый пиксель (9,9), который является истинным 10-пиксельным пиксельным ящиком.
Практическое значение состоит в том, что вы не можете нарисовать 10-широкий прямоугольник внутри 10-широкого компонента, потому что 10-широкий прямоугольник действительно 11-и широкий, и правый крайний пиксель будет отсечен. Это правильно?
Приведенный ниже код демонстрирует поведение, создавая прямоугольник шириной 460 дюймов внутри компонента 460.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.ArrayList;
public class TestBox extends JPanel {
public static void main(String[] args){
JFrame window = new JFrame("TestBox");
TestBox content = new TestBox();
window.setContentPane(content);
window.pack();
Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();
window.setLocation((screensize.width - window.getWidth())/2,
(screensize.height - window.getHeight())/2);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setResizable(false);
window.setVisible(true);
}
private Box box;
public TestBox(){
setLayout(null);
setPreferredSize(new Dimension(500,500));
setBackground(new Color(200,200,200));
box = new Box();
add(box);
box.setBounds(20, 20, 460, 460);
}
private class Box extends JPanel {
public void paintComponent(Graphics g){
g.setColor(Color.BLACK);
g.drawRect(0, 0, 460, 460);
}
}
}