Я действительно смущен, я попытался установить овал точно в красную JPanel, а овал пошел на 5 пикселей слишком низко. Я попытался изменить y1 на -5, так что это было бы точно в JPanel, овал переместился в нужное место, но пять верхних рядов овала были стерты, почему это произошло? и как разместить овал в середине JPanel?пять верхних рядов овала стираются. Зачем?
package il.co.atlantis;
import javax.swing.*;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
public class PanelExample_Extended{
public static final int WID = 20, HEI = 20;
public static int x1 = 0, y1 = -5;
public class MyGraphics extends JComponent {
private static final long serialVersionUID = 7526472295622776147L;
MyGraphics() {
setPreferredSize(new Dimension(20,20));
}
public void paintComponent(Graphics g){
super.paintComponents(g);
g.setColor(Color.blue);
g.fillOval(x1, y1, WID, HEI);
}
}
public JPanel createContentPane(){
JPanel totalGUI = new JPanel();
totalGUI.setLayout(null);
JPanel redPanel = new JPanel();
redPanel.setBackground(Color.red);
redPanel.setLocation(10, 10);
redPanel.setSize(20,20);
MyGraphics tr = new MyGraphics();
tr.setLocation(0, 0);
redPanel.add(tr);
totalGUI.add(redPanel);
JPanel bluePanel = new JPanel();
bluePanel.setBackground(Color.blue);
bluePanel.setLocation(220, 10);
bluePanel.setSize(50, 50);
totalGUI.add(bluePanel);
totalGUI.setOpaque(true);
return totalGUI;
}
private static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("[=] ??? [=]");
PanelExample_Extended demo = new PanelExample_Extended();
frame.setContentPane(demo.createContentPane());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(290, 100);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
Использовать правильные имена переменных «WID» и «HEI» не означает многого. Если вы хотите, чтобы люди читали ваш код, используйте понятные имена. Также не используйте статические переменные для X, Y. Вы никогда не сможете изменить положение других компонентов, которые вы могли бы использовать. Все эти свойства принадлежат классу, который рисует компонент. – camickr