你能告诉我为什么我的repaint()
方法在我的代码中不起作用吗?你知道一些网站,我可以从中学到基本知识。提前致谢。
public class OknoGry extends JFrame
{
public static enum Tryb{NOWA_GRA,LISTA_NAJLEPSZYCH, USTAWIENIA, MENU}
private JButton nowa_gra,wyjscie,ustawienia,lista_najlepszych;
OknoGry()
{
zaladujPrzysicki();
}
public void zaladujPrzysicki(){
JFrame okno_gry = new JFrame ("LUNAR LANDER");
JPanel panel = (JPanel)okno_gry.getContentPane();
panel.setLayout(null);
okno_gry.setBounds(0,0,600,400);
okno_gry.setVisible(true);
wyjscie = new JButton("Wyjscie");
wyjscie.setBounds(150, 200, 300, 50);
wyjscie.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
});
panel.add(wyjscie);
nowa_gra = new JButton("Nowa Gra");
nowa_gra.setBounds(150,150,300,50);
nowa_gra.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
przyciskNowaGra();
// repaint();
}
});
panel.add(nowa_gra);
ustawienia = new JButton("Ustawienia");
ustawienia.setBounds(150, 100, 300, 50);
ustawienia.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
przyciskUstawienia();
}
});
panel.add(ustawienia);
lista_najlepszych = new JButton("Lista Najlepszych Wynikow");
lista_najlepszych.setBounds(150, 50, 300, 50);
lista_najlepszych.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
przyciskListaNajlepszych();
}
});
panel.add(lista_najlepszych);
okno_gry.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
okno_gry.setVisible(true);
okno_gry.setResizable(false);
// panel.paintComponents(g);
}
protected void przyciskUstawienia() {
tryb_gry = tryb_gry.USTAWIENIA;
}
protected void przyciskListaNajlepszych() {
tryb_gry = tryb_gry.LISTA_NAJLEPSZYCH;
}
protected void przyciskNowaGra() {
tryb_gry = tryb_gry.NOWA_GRA;
//System.out.println("uzytkowniku kliknales na przysick nowa gra");
nowa_gra.setVisible(false);
wyjscie.setVisible(false);
ustawienia.setVisible(false);
lista_najlepszych.setVisible(false);
//System.out.println(tryb_gry);
repaint();
}
public void rysujMape(Graphics g){
Dimension dim = getSize();
System.out.println("JESTEM W METODZIE rysujMape");
System.out.println(punkt_y1*dim.height);
System.out.println(punkt_x2*dim.width);
g.drawLine(0, punkt_y1*dim.height/100, punkt_x2*dim.width/100, punkt_y2*dim.height/100);
g.drawLine(punkt_x2*dim.width/100, punkt_y2*dim.height/100, punkt_x3*dim.width/100, punkt_y3*dim.height/100);
g.drawLine(punkt_x3*dim.width/100,punkt_y3*dim.height/100,punkt_x4*dim.width/100,punkt_y4*dim.height/100);
g.drawLine(punkt_x4*dim.width/100,punkt_y4*dim.height/100, punkt_x5*dim.width/100,punkt_y5*dim.height/100);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
System.out.println("jestem w metodzie paintComponent");
switch(tryb_gry){
case NOWA_GRA:{
rysujMape(g);
rakieta.rysujRakiete(g);
break;
}
case USTAWIENIA:{
break;
}
case LISTA_NAJLEPSZYCH:{
break;
}
case MENU:{
break;
}
default:{
break;
}
}
}
public static void main(String args[])
{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//createAndShowGUI();
OknoGry gf = new OknoGry();
}
});
}}
我不知道为什么它不起作用,请帮忙。
答案 0 :(得分:2)
您的课程是JFrame
, 没有paintComponent
方法,所以实际上并没有覆盖任何绘画功能。
您的类已经是JFrame
,但您在构造函数中创建了另一个JFrame
实例。为什么?唐'吨。选择其中一个。
paintComponent
应在JPanel
中覆盖。因此,创建一个扩展JPanel的类,覆盖该面板中的paintComponent
,然后将该面板添加到您的框架中。
使用@Override
注释,以便了解您是否正确覆盖了某个方法。
@Override
protected void paintComponent(Grapchics g) {}
当您致电repaint()
时,请确保您在面板上而不是相框中调用它。
有关绘画的更多信息,请参阅Performing Custom Painting
在添加组件后将框架设置为。
避免使用空布局。学习使用布局管理器。请参阅Laying Components Within a container