Как сделать два цвета в одном окне? - PullRequest
0 голосов
/ 10 марта 2020

Я хочу сделать то же самое, как это:

the image

Вот код:

import java.awt.Color;
import java.awt.event.*;
import javax.swing.*;

class QuizGUI {
    public static void main(String args[]) {
        JFrame frm = new JFrame("Simple Quiz");
        frm.setLayout(null);
        JLabel lbl1 = new JLabel("Which Animal can fly?");
        JLabel lbl2 = new JLabel("You have selected: ");
        JLabel lblOutput = new JLabel();
        JRadioButton rCat = new JRadioButton("Cat");
        JRadioButton rBird = new JRadioButton("Bird");
        JRadioButton rFish = new JRadioButton("Fish");
        ButtonGroup bg = new ButtonGroup();

        bg.add(rCat);
        bg.add(rBird);
        bg.add(rFish);

        lbl1.setBounds(0, 0, 200, 20);
        rCat.setBounds(0, 20, 100, 20);
        rBird.setBounds(0, 40, 100, 20);
        rFish.setBounds(0, 60, 100, 20);
        lbl2.setBounds(0, 80, 200, 20);
        lblOutput.setBounds(0, 105, 200, 20);

        frm.add(lbl1);
        frm.add(rCat);
        frm.add(rBird);
        frm.add(rFish);
        frm.add(lbl2);
        frm.add(lblOutput);

        rCat.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                if (rCat.isSelected()) {
                    lblOutput.setText("Cat can't fly, Try again.");
                }
            }
        });

        rBird.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                if (rBird.isSelected()) {
                    lblOutput.setText("Bird can fly, Excellent.");
                }
            }
        });

        rFish.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                if (rFish.isSelected()) {
                    lblOutput.setText("Cat can't fly, Try again.");
                }
            }
        });

        frm.setVisible(true);
        frm.setSize(350, 200);

        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

Проблема в том, Мне нужны цвета окна, такие как изображение, фон белый, а фон для выбора серый.

Я пробовал frame.setBackground, но не работает.

Я попробовал некоторые коды для других примеров, и цвет был белым. Я не знаю, почему все серое окно выглядит так:

img

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Из кода, который вы отправили в своем вопросе:

frm.setLayout(null);

Это не очень хорошая идея. Я рекомендую всегда использовать менеджер макетов . JFrame является контейнером верхнего уровня . Он имеет панель содержимого, которая по умолчанию имеет значение JPanel. Менеджер по умолчанию для панели содержимого - BorderLayout. Вы можете обратиться к исходному коду для JFrame, чтобы подтвердить это.

На мой взгляд, BorderLayout подходит для вашего GUI. Один JPanel является СЕВЕРНЫМ компонентом и отображает вопрос, а именно: Какое животное может летать? , переключатели - это компонент ЦЕНТР, а текст Вы выбрали: - ЮЖНОЕ panel.

Каждый JPanel может иметь собственный цвет фона. Я использую JDK 13 на Windows 10, а цвет фона по умолчанию - серый. Следовательно, в приведенном ниже коде я установил цвет фона для панелей СЕВЕР и ЮГ и оставил для панели ЦЕНТР цвет фона по умолчанию.

0 голосов
/ 10 марта 2020

Сначала создайте приватный JPanel с именем contentPane в своем классе Викторина GUI. Затем в вашем методе main введите:

contentPane = new JPanel();
contentPane.setBackground(Color.WHITE);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
frm.setContentPane(contentPane);
contentPane.setLayout(null);

, затем измените все frm.add() на contentPane.add()

Надеюсь, это помогло!

...