[NASIL] CardLayout kullanarak JPaneller arası geçiş

Başlatan srgnaras, 06 Nisan 2018 - 00:08:30

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

srgnaras

Merhaba millet tek bir JFrame sahibi olup birden fazla JPanel kullanarak bunların arasınge geçişler yapmak istiyorum. Bunu nasıl yapabilirim? Şu şekilde denedim ama olmadı..

package gui;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

@SuppressWarnings("serial")
public class Form_Main extends JFrame {

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Form_Main frame = new Form_Main();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public Form_Main() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);

JPanel pg = new Panel_Giris();
panelEkle(pg);
}

public void panelEkle(JPanel j) {
j.setBorder(new EmptyBorder(5, 5, 5, 5));
j.setLayout(null);
setContentPane(j);
}

}


package gui;

import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

@SuppressWarnings("serial")
public class Panel_Giris extends JPanel {
private JTextField textField;
private JTextField textField_1;

/**
* Create the panel.
*/
public Panel_Giris() {
setLayout(null);

JLabel lblNewLabel = new JLabel("New label");
lblNewLabel.setBounds(68, 95, 70, 15);
add(lblNewLabel);

textField = new JTextField();
textField.setBounds(177, 93, 114, 19);
add(textField);
textField.setColumns(10);

JLabel lblNewLabel_1 = new JLabel("New label");
lblNewLabel_1.setBounds(68, 143, 70, 15);
add(lblNewLabel_1);

textField_1 = new JTextField();
textField_1.setBounds(177, 141, 114, 19);
add(textField_1);
textField_1.setColumns(10);

JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Form_Main fm = new Form_Main();
JPanel ana = new Panel_A();
fm.panelEkle(ana);
}
});
btnNewButton.setBounds(177, 193, 117, 25);
add(btnNewButton);

}
}


Panel eklemek için panelEkle diye bir yordamım var ve bu yordamla dışarıdan panel nesnesi alarak onu frame üzerinde yazdırıyorum ama bir şeyi gözden kaçırdığım için çalışmıyor. Acaba kurduğum mantıkta mı bir sıkıntı var?
En zengin insan en güçlü arkadaşlara sahip insandır.

srgnaras

Buradan cevap çıkmayınca bugün stackoverflow'a çat pat ingilizcemle bir başlık atıp sordum.
Cardlayout adında bir itemle karşılaştım. Bu itemi birden fazla JPanel kullanmak istediğimiz zaman bunu kullanıyoruz.
Önce bir JPanel yaratıp bunu CardLayout özelliği veriyoruz ve sonrasın da bunun altına JPaneller koyuyoruz.
Eğer JPanelleri benim gibi JFrame içerisinde yaratmaktansa ayrı bir class olarak yaratıp kullanmak istiyorsanız CardLayout özellği verdiğiniz JPaneli static yapmanız yeterli oluyor.
Örnek olması için;

package gui;


import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JMenuBar;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.CardLayout;
import java.awt.Color;

public class Form_Main extends JFrame {

static JPanel contentPane;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Form_Main frame = new Form_Main();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public Form_Main() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);

JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);

JButton btnKirmizi = new JButton("Kırmızı");
btnKirmizi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
CardLayout c = (CardLayout) (contentPane.getLayout());
c.show(contentPane, "t1");
}
});
menuBar.add(btnKirmizi);

JButton btnMavi = new JButton("Mavi");
btnMavi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
CardLayout c = (CardLayout) (contentPane.getLayout());
c.show(contentPane, "t2");
}
});
menuBar.add(btnMavi);

JButton btnSari = new JButton("Sarı");
btnSari.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
CardLayout c = (CardLayout) (contentPane.getLayout());
c.show(contentPane, "t3");
}
});
menuBar.add(btnSari);

JButton btnYesil = new JButton("Yesil");
btnYesil.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
CardLayout c = (CardLayout) (contentPane.getLayout());
c.show(contentPane, "t4");
}
});
menuBar.add(btnYesil);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new CardLayout(0, 0));

JPanel pKirmizi = new Panel_Giris();
//pKirmizi.setBackground(Color.RED);
contentPane.add(pKirmizi, "t1");

JPanel pMavi = new JPanel();
pMavi.setBackground(Color.BLUE);
contentPane.add(pMavi, "t2");

JPanel pSari = new JPanel();
pSari.setBackground(Color.YELLOW);
contentPane.add(pSari, "t3");

JPanel pYesil = new JPanel();
pYesil.setBackground(Color.GREEN);
contentPane.add(pYesil, "t4");
}

}


package gui;

import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JLabel;

import java.awt.CardLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Panel_Giris extends JPanel {
private JTextField textField;

/**
* Create the panel.
*/
public Panel_Giris() {
setLayout(null);

JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
CardLayout c = (CardLayout) (Form_Main.contentPane.getLayout());
c.show(Form_Main.contentPane, "t4");
}
});
btnNewButton.setBounds(283, 121, 117, 25);
add(btnNewButton);

textField = new JTextField();
textField.setBounds(283, 90, 117, 19);
add(textField);
textField.setColumns(10);

JLabel lblNewLabel = new JLabel("New label");
lblNewLabel.setBounds(283, 63, 70, 15);
add(lblNewLabel);

}
}


Türkçe bu konuda kaynak bulamadığım için başlığın adını değiştiriyorum. Umarım başka birinin işini görür.
En zengin insan en güçlü arkadaşlara sahip insandır.