#java #swing #jframe
#java #качать #jframe
Вопрос:
Я пытаюсь изучить Java и JFrames. Я собрал это простое приложение, в котором основной класс запускает класс MainGui. MainGui будет содержать кучу кнопок, каждая из которых выполняет что-то свое (сейчас у него есть только canadaFlagButton). У меня нет проблем с открытием окна для MainGui с помощью кнопки, которую я создал.
Однако, когда я нажимаю кнопку canadaFlagButton, предполагается, что она запускает новое окно, но вместо этого ничего не происходит.
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MainGui extends JFrame implements ActionListener {
JButton canadaFlagButton;
MainGui() {
canadaFlagButton = new JButton("Canada Flag");
canadaFlagButton.setBounds(100, 100, 200, 50);
canadaFlagButton.setFocusable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(400, 600);
this.setLayout(null);
this.add(canadaFlagButton);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==canadaFlagButton) {
CanadaFlag window1 = new CanadaFlag();
}
}
}
//Can I draw the Canadian flag?
Это класс CanadaFlag:
import javax.swing.*;
import java.awt.*;
public class CanadaFlag extends JFrame {
CanadaFlag() {
//creating label for maple leaf
JLabel leafLabel = new JLabel();
ImageIcon leaf = new ImageIcon("mapleleaf.png");
leafLabel.setIcon(leaf);
leafLabel.setVerticalAlignment(JLabel.CENTER);
leafLabel.setHorizontalAlignment(JLabel.CENTER);
JPanel redLeftPanel = new JPanel();
redLeftPanel.setBackground(Color.red);
redLeftPanel.setBounds(0, 0, 400, 1000);
JPanel redRightPanel = new JPanel();
redRightPanel.setBackground(Color.red);
redRightPanel.setBounds(1000, 0, 400, 1000);
JPanel whiteMiddlePanel = new JPanel();
whiteMiddlePanel.setBackground(Color.white);
whiteMiddlePanel.setBounds(400, 0, 600, 1000);
whiteMiddlePanel.setLayout(new BorderLayout());
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
this.setSize(1400, 1000);
this.setVisible(true);
this.add(redLeftPanel);
this.add(redRightPanel);
this.add(whiteMiddlePanel);
whiteMiddlePanel.add(leafLabel);
}
}
Ответ №1:
-
Приложение должно иметь только один основной JFrame. Если вам нужны другие окна, вы обычно используете JDialog.
-
Swing был разработан для использования с Layout manager. Если вы пытаетесь изучить Swing, ознакомьтесь с руководством Swing по менеджерам компоновки для получения дополнительной информации и рабочего примера.
предполагается, что оно запускает новое окно, но вместо этого ничего не происходит
Вы никогда не добавляете ActionListener
к кнопке.
canadaFlagButton.addActionListener( this );
В руководстве также есть раздел How to Use Buttons
, содержащий рабочий пример. Я предлагаю вам сохранить ссылку на учебник для примеров всех основ Swing.
Комментарии:
1. Спасибо, я забыл ActionListener! Я сохраню эту ссылку в закладках, выглядит очень полезно.
2. @SushiCode, рад, что это помогло. Не забудьте «принять» ответ, нажав на галочку (рядом с ответом), чтобы люди знали, что проблема решена.