Я пытаюсь нарисовать прямоугольник со скругленными углами в качестве фона для компонента в моем пользовательском интерфейсе. Для этого я вызываю метод fillRoundRect()
. Однако я не могу найти способ получить позицию компонента. Я пытался использовать getX()
и getY()
, getLocation()
, getBounds()
и getLocationOnScreen()
. Все эти методы помещают прямоугольник в неправильную позицию при вызове в переопределенном методе paintComponent()
.
Основной класс:
JScrollPane projectListPane;
JPanel projectEntriesPane;
public static void main(String[] args) {
JFrame frame = new JFrame("Being Productive");
frame.setSize(300,300);
frame.setContentPane(new TestClass());
frame.pack();
frame.setVisible(true);
}
public TestClass() {
setLayout(new BorderLayout());
initProjectPane();
projectListPane = new JScrollPane(projectEntriesPane);
add(projectListPane);
}
private void initProjectPane() {
projectEntriesPane = new JPanel();
projectEntriesPane.setLayout(new BoxLayout(projectEntriesPane,BoxLayout.Y_AXIS));
for(int i = 0; i < 4; i++)
{
JLabel label = new JLabel();
JRounded round = new JRounded(label);
label.setText("test");
projectEntriesPane.add(round);
}
projectEntriesPane.repaint();//just seeing if this would do anything. It didn't
}
Класс пользовательских компонентов:
public class JRounded extends JPanel{
public JRounded(Component contained) {
setLayout(new BorderLayout());
add(contained, BorderLayout.CENTER);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setPaint(Color.RED);
g2.setStroke(new BasicStroke(2.0f));
Point position = **position method**;
g2.fillRoundRect(position.x, position.y, getWidth(), getHeight(), 15, 15);
}
}