Добавить графический интерфейс с Swing, но не уверен в последовательности, чтобы принять

1

Я создаю графический интерфейс для алгоритма обработки данных. Я могу создать экземпляр окна, дать ему фон, название и т.д., Но когда я пытаюсь добавить к нему панели, у меня возникают проблемы. То, что я действительно ищу больше, чем корректор, - это предложение о последовательности, в которой можно создавать, настраивать и добавлять объекты в Java Swing, чтобы они вели себя корректно, в общем смысле. Итак, это лучший способ создать JFrame с разноцветной панелью?

  1. Объявить JFrame

  2. Установите цвет JFrame (цвет фона)

  3. Объявить JPanel (поле для представления данных графически)

  4. Установить цвет JPanel (цвет коробки)

  5. Добавить JPanel в JFrame

  6. Установите JFrame на visible = true

Это имеет смысл интуитивно, но, похоже, это не работает, независимо от того, что я делаю. Я нашел пошаговые инструкции в другом месте, но они склонны объяснять, что вводить больше, чем то, что вы печатаете, поэтому вы получаете очень узкое представление о том, что происходит. Спасибо за любую помощь!

Ниже приведен полный код; Я не решался опубликовать его, потому что начал экспериментировать с Graphics2D, и он не очень хорошо комментируется, но если это помогает:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;

import javax.swing.*;
import javax.swing.border.TitledBorder;


public class GUI extends JFrame
{
    JFrame mainWindow = new JFrame();
    JPanel backgroundPanel = new JPanel();
    JPanel subPanel = new JPanel();

    Color background = new Color(40,40,40);
    Color subWindow = new Color(255, 255, 255);

    TitledBorder title = BorderFactory.createTitledBorder("title");

    Rectangle rect1 = new Rectangle(10, 10, 40, 40);
    Graphics2D g;

    public static void main (String[] args)
    {
        new GUI();
    }

    public GUI()
    {
        initializeGUI();
    }

    private void initializeGUI() 
    {
        mainWindow.setSize(1340, 880);

        backgroundPanel.setBackground(background);
        subPanel.setBackground(subWindow);
        subPanel.setBorder(title);

        mainWindow.setTitle("Ed");

        mainWindow.setLocationRelativeTo(null);
        mainWindow.setDefaultCloseOperation(EXIT_ON_CLOSE);

        mainWindow.add(backgroundPanel);
        backgroundPanel.add(subPanel);

        updateGUI();

    }

    public void updateGUI()
    {
        mainWindow.setVisible(false);
        mainWindow.setVisible(true);
    }

    public void paintComponent(Graphics g)
    {
        this.g.setColor(subWindow);
        this.g.fill(rect1);
        this.g = (Graphics2D) g;        
    }
}
  • 1
    Логика кажется найти. Подумайте о предоставлении работающего примера, который демонстрирует вашу проблему. Это приведет к меньшему беспорядку и лучшим ответам
  • 2
    Ага. Вы фактически спрашиваете, почему ваш код не работает, и чтобы помочь вам с этим, вам нужно опубликовать код.
Теги:
user-interface
graphics
swing

1 ответ

2
Лучший ответ

Пусть это сломается...

public class GUI extends JFrame {
    JFrame mainWindow = new JFrame();

Нет необходимости extend JFrame поскольку вы не используете его, и вы не добавляете какое-либо значение в класс.

Эта...

public void paintComponent(Graphics g) {
    this.g.setColor(subWindow);
    this.g.fill(rect1);
    this.g = (Graphics2D) g;
}

ничего не делает и никогда не будет вызван, поскольку ничто из того, что вы расширили, не реализует метод paintComponent (то есть JFrame не имеет метаданных paintComponent) (и вы все равно не привязаны к чему-либо, отображаемому на экране). Кроме того, вы НИКОГДА не должны поддерживать ссылку на любой Graphics контекст, который вы сами не создали.

Причина, по которой subPanel появляется так "маленькая", состоит в том, что она не имеет определяемого размера, кроме границы.

Вы могли бы исправить это одним из трех способов...

  1. Вы можете изменить диспетчер компоновки backgroundPanel на нечто вроде BorderLayout
  2. Вы можете переопределить getPreferredSize метод из subPanel вернуть более подходящий размер или
  3. Вы могли бы добавить к нему другие компоненты и позволить менеджеру компоновки понять это...

В любом случае, вы должны взглянуть на " Укладка компонентов внутри контейнера".

Вы также должны взглянуть на живопись в AWT и Swing и выполнить пользовательскую живопись для более подробной информации о том, как живопись делается в Swing

Ещё вопросы

Сообщество Overcoder
Наверх
Меню