это первый раз, когда я посмотрел на JFrames и JPannels, и я немного застрял.Java - замена нескольких JFrames на кнопку
То, что я пытаюсь сделать, это то, что я хочу иметь начальный экран, тогда на основе выбора кнопки пользователя он переходит на другой экран. Для начала у меня есть только 2 экрана, но как только я перейду, будет много экранов. Я посмотрел на CardLayout, и хотя это хорошо, я не хочу, чтобы я хотел это сделать первым. Вот что у меня есть.
Main.java
import java.awt.BorderLayout;
public class Main extends JFrame {
private JPanel contentPane;
protected boolean someCondition = false;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Main() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
if(someCondition == false){
showTest();
someCondition = test.needToReg();
}else{
showTest2();
}
}
private void showTest(){
contentPane.removeAll();
contentPane.add(new test());
setContentPane(contentPane);
revalidate();
repaint();
}
private void showTest2(){
contentPane.removeAll();
contentPane.add(new test2());
setContentPane(contentPane);
revalidate();
repaint();
}
}
test.java
import javax.swing.JPanel;
public class test extends JPanel {
private JTextField textField;
protected static boolean toReg = false;
/**
* Create the panel.
*/
public test() {
setLayout(null);
JButton btnNewButton = new JButton("New button");
btnNewButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Mouse Clicked");
System.out.println("Before " + toReg);
toReg = true;
System.out.println("After " + toReg);
}
});
btnNewButton.setBounds(188, 166, 89, 23);
add(btnNewButton);
textField = new JTextField();
textField.setBounds(150, 135, 86, 20);
add(textField);
textField.setColumns(10);
JRadioButton rdbtnNewRadioButton = new JRadioButton("New radio button");
rdbtnNewRadioButton.setBounds(6, 166, 109, 23);
add(rdbtnNewRadioButton);
}
public static boolean needToReg(){
return toReg;
}
}
test2.java
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JLabel;
public class test2 extends JPanel {
/**
* Create the panel.
*/
public test2() {
setLayout(null);
JButton btnNewButton = new JButton("New button");
btnNewButton.setBounds(56, 59, 89, 23);
add(btnNewButton);
JLabel lblNewLabel = new JLabel("New label");
lblNewLabel.setBounds(122, 165, 46, 14);
add(lblNewLabel);
}
}
Запуск программы с выходов я включил я получаю это ,
Mouse Clicked
Before false
After true
Mouse Clicked
Before true
After true
Mouse Clicked
Before true
After true
Mouse Clicked
Before true
After true
Mouse Clicked
Before true
After true
Я надеюсь, что это ясно, что я пытаюсь сделать, и надеюсь, что вы сможете протянуть руку с этим. Благодаря
* "Я посмотрел на CardLayout и в то время как это хорошо, что это не так, как я хочу я хочу, чтобы иметь возможность сделать это первым ». * Удачи вам в этом, я думаю, глупо не использовать лучший способ. Я голосую, чтобы закрыть как «слишком локализованный». –
Что случилось с использованием Cardlayout? его цель - разрешить пользователю переключаться между макетами, такими как карты стека. То, как вы сейчас переключаетесь, не является хорошим способом его реализации. Взгляните на учебник еще раз. Он делает именно то, что вы хотите http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html – Aboutblank
@AndrewThompson Что не так с желанием расширить свои знания, взглянув на другие способы делать что-то? Мне кажется глупым ограничивать ваши знания просто так, как способ, которым вы учитесь, не самый лучший способ. Способ, который я чувствую, улучшить, это попробовать, посмотреть, что произойдет. Просто делать лучший способ не сделает вас лучше. Просто мое мнение. – Kyle93