Мой графический интерфейс не работает. Как я могу это исправить? (Он включает в себя изображение на кнопке jbutton.)
После того, как я переместил JFrame вещи из драйвера в Drum.java-он перестал работать.
код:
public class Drum extends JFrame { private JButton hihat,snare,tom1,tom2,base,floortom, ridecymbal,crashcymbal; private JLabel label1,label2,label3,label4,label5,label6,label7,label8,label9,part1,part2,part3,part4,part5,part6,part7,part8; private ImageIcon I1,I2,I3,I4,I5,I6,I7,I8; private JPanel p1,p2; public Drum(){ //Adds a new JFrame JFrame frame= new JFrame("Drumset"); // So that when you x the GUI, the program will close. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Drum panel2 = new Drum(); // initalizes the contents of frame. frame.getContentPane().add(panel2); // so the frame can be visible. frame.setVisible(true); // makes the frame fit the size of the contents frame.pack(); // makes the frame visible. frame.setVisible(true); //creates the panel p1= new JPanel(); //creates the buttons hihat= new JButton(); // sets button to an image hihat.setIcon(new ImageIcon("Snare.PNG")); // adds button to panel p1.add(hihat); // adds panel add(p1);</pre> } }
Что я уже пробовал:
Я попробовал переместить Jframe вещи на дно и сделать это:
public static void main(String[] args){ <pre> JFrame frame= new JFrame("Drumset"); // So that when you x the GUI, the program will close. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Drum panel2 = new Drum(); // initalizes the contents of frame. frame.getContentPane().add(panel2); // so the frame can be visible. frame.setVisible(true); // makes the frame fit the size of the contents frame.pack(); // makes the frame visible. frame.setVisible(true);
}
}
}
Richard MacCutchan
Вы создаете местный переменные (рамка, панель и т. д.) внутри конструктора барабана. Поэтому, как только код конструктора заканчивается, все эти переменные выходят из области видимости и собираются в мусор. Если вы хотите, чтобы они действовали в течение всего срока действия приложения, то они должны быть объявлены на уровне класса.
Tornado 9000
Как бы я объявил рамку, панели, Jbuttons и JLabel на уровне класса?
Richard MacCutchan
Точно так же, как и для любых переменных уровня класса. Если вы все еще не совсем понимаете классы, объекты, правила области действия и т. д., то я предлагаю вам перейти к Учебные Пособия По Java™ [^] для некоторых превосходных учебных пособий.