Как переопределить методы из не наследуемого класса? Во-вторых, есть ли лучший термин, чем «не унаследованные классы»?Java: переопределение методов из не унаследованных классов
У меня есть класс, который «расширяет» JFrame и должен переопределять paintComponent от JPanel. Как? Или он может расширить JPanel и должен получить доступ к таким методам, как setTitle(), setResizable() и setDefaultCloseOperation();
В ответ на последний ответ:
Я сделал это:
public class Chess extends JPanel {
boolean du, dd, dl, dr;
double x, y;
public class AL extends KeyAdapter {
public void keyPressed(KeyEvent e) {
int keyC = e.getKeyCode();
switch(keyC) {
case KeyEvent.VK_LEFT:
dl = true;
break;
case KeyEvent.VK_RIGHT:
dr = true;
break;
case KeyEvent.VK_DOWN:
dd = true;
break;
case KeyEvent.VK_UP:
du = true;
break;
}
}
public void keyReleased(KeyEvent e) {
int keyC = e.getKeyCode();
switch(keyC) {
case KeyEvent.VK_LEFT:
dl = false;
break;
case KeyEvent.VK_RIGHT:
dr = false;
break;
case KeyEvent.VK_DOWN:
dd = false;
break;
case KeyEvent.VK_UP:
du = false;
break;
}
}
}
public void Chess() {
JFrame frame = new JFrame();
frame.addKeyListener(new AL());
frame.setTitle("Chess");
frame.setSize(500, 500);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
du = dl = dd = dr = false;
x = y = 150;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.CYAN);
double i = .25;
if (du) {
y -= i;
}
if (dr) {
x += i;
}
if (dd) {
y += i;
}
if (dl) {
x -= i;
}
if (x < 0) {
x = 0;
}
if (x > getWidth() - 25) {
x = getWidth() - 25;
}
if (y < 25) {
y = 25;
}
if (y > getHeight() - 25) {
y = getHeight() - 25;
}
g.drawOval((int) x, (int) y, 25, 25);
repaint();
}
public static void main(String[] args) {
new Chess();
}
}
Он должен двигаться овал вокруг экрана (я пытаюсь получить основы вниз), но когда я запустите его, окно не появится. Он работал, когда использовался jFrame и перерисовывал краску и называл неперекрываемую paintComponent() от paint(). не то, что я хочу делать. Почему окно больше не отображается?
Я сделал это: –
@jacob: В вашем коде вы никогда не создаете окно верхнего уровня, такое как JFrame, а затем помещаете шахматную JPanel в это окно, поэтому ничего не будет отображаться. Посмотрите еще раз на мой код, как я покажу вам, как это сделать. Кроме того, никогда не вызывайте 'repaint()' из метода 'paintComponent'. Когда-либо. –
Также не вызывайте 'setBackground (...)' изнутри paintComponent.Эта строка должна быть в конструкторе класса. –