Tornado 9000 Ответов: 0

Мой графический интерфейс не работает. Как я могу это исправить? (Он включает в себя изображение на кнопке 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™ [^] для некоторых превосходных учебных пособий.

0 Ответов