Küçük bir GUI oluşturmaya çalışıyorum, her birinde 2 tane JButton ve 2 adet JPanels var. Varsayılan olarak, ilk JPanel'i göstermeli ve ikinci JBanton'a tıklayarak ikinci JPanel'imi görmek istiyorum. Yani: Animasyonlarımı çizdiğim, Button1 ve Button2 oluşturduğum ve onlara ActionListeners eklediğim JFrame, Panel1 ve Panel2'yi yaratıyorum. Ben de bir alan değişkeni olan MainPanel var. Bu "i" yi değiştirerek, yapıcım MainPanel'e Panel1 (varsayılan) veya Panel2'yi ekler (JButton2'yi tıklatarak I'i değiştiririm). Bu MainPanel'i çerçeveme eklerim. Yani benim sorum: MainPanel sınıfında refreshMe yöntemim var, GUI'mizin düzgün çalışması için ne yazmalıyım? Teşekkürler. Sadece senin işlevi uygulamak için CardLayout
kullanabilirsiniz düşünüyorumJBanton'a tıklayarak JPanel nasıl eklenir?
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GuiTest {
public static void main(String[] args) {
JFrame f = new JFrame();
MainPanel myPanel = new MainPanel();
f.add(myPanel);
Button1 button1 = new Button1();
Button2 button2 = new Button2();
myPanel.add(button1);
myPanel.add(button2);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
}
class MainPanel extends JPanel {
Panel1 p1 = new Panel1();
Panel2 p2 = new Panel2();
public int i = 1; //this is being changed later by clicking JButton
// I use this setter later in actionPerformed in order to change i
public void setI(int i) {
this.i = i;
}
MainPanel() {
if (i == 1) {
this.add(p1);
}
if (i == 2) {
this.add(p2);
}
}
public void refreshMe() {
// Need some help here:
// I don't know what should I write, how to make a repaint of myPanel?
System.out.println("just test, if the method refreshMe working by clicking some button");
}
}
class Panel1 extends JPanel {
public Panel1() {
this.setBackground(Color.BLUE);
// a lot of drawing stuff going on here
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
class Panel2 extends JPanel {
public Panel2() {
this.setBackground(Color.GREEN);
// a lot of drawing stuff going on here
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
class Button1 extends JButton {
MainPanel someObj1 = new MainPanel();
Button1() {
setText("Show Annimation A");
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
someObj1.setI(1);
System.out.println("The variable i is now: " + someObj1.i);
someObj1.refreshMe();
}
});
}
}
class Button2 extends JButton {
MainPanel someObj2 = new MainPanel();
Button2() {
setText("Show Annimation B");
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
someObj2.setI(2);
System.out.println("The variable i is now: " + someObj2.i);
someObj2.refreshMe();
}
});
}
}
Kodumu ve örneğimi düzeltdiğiniz için teşekkür ederiz, bu çok yardımcı oluyor! Evet, CardLayout problemimi çözüyor. – user1924939