Можно ли создать подобный графический интерфейс в Java? - PullRequest
11 голосов
/ 12 января 2010

Я сделал это в Photoshop, и я планирую использовать его для моего приложения для обмена файлами:

Screenshot

Мне было интересно, можно ли создатьГрафический интерфейс для моего приложения, которое будет выглядеть и чувствовать.

Если я не могу собрать его только с помощью eclipse или NetBeans, есть ли другие инструменты, которые могут мне помочь?

Ответы [ 10 ]

33 голосов
/ 12 января 2010

О, дорогой, нет-нет-нет! Если вы хотите, чтобы глаза ваших пользователей кровоточили, сделайте это. В противном случае следуйте инструкциям интерфейса пользователя, подходящим для вашей платформы.

Чтобы ответить на ваш вопрос: это, безусловно, выполнимо в любой современной оконной системе.

Вот что обычно происходит, когда программисты проектируют пользовательский интерфейс:

wGetGUI
(источник: jensroesner.de )

Bulk Rename Utility (источник: bulkrenameutility.co.uk )

18 голосов
/ 13 января 2010

Это не только возможно, но и довольно просто, вам не нужно делать все возможное, чтобы создать собственный стиль.

Вот что я сделал за 20 минут:

20mins

В Интернете много информации о том, как настраивать компоненты без необходимости создания совершенно нового L & F.

Понимание архитектуры Swing очень помогает.

На тот случай, если вы его еще не прочитали, Swing Tutorial здесь.

Наконец вам понадобится документ: Java документ

9 голосов
/ 12 января 2010

Вы можете и даже можете динамически изменять его - см. Функция Look-n-Feel свинга

7 голосов
/ 12 января 2010

Это возможно. Но для большинства разработчиков Java это потребовало бы подавления рвотного рефлекса на таком уродливом интерфейсе.

Вот интерфейс Java Я написал, не используя никаких инструментов, кроме vi. Я не проектировал это, я просто взял дизайн художников, держал мой нос и осуществил это.

Что касается специфики, я бы посоветовал сделать как можно больше взгляда и ощущения через сменный внешний вид в Swing. Кроме того, используйте LayoutManager вместо того, чтобы делать вещи постоянными размерами в постоянных местах, чтобы вещи могли расти и уменьшаться до разных разрешений экрана, а также, чтобы при переводе вещей вам не приходилось изменять размеры всех текстовых меток, а затем перетасовывать все еще вокруг.

3 голосов
/ 13 января 2010

Создание нового LaF - это слишком много. Поскольку все ваши JButton разные, просто используйте JButton.setIcon() и JButton.setPressedIcon() и используйте ваши изображения. Остальное загружает фон и использует странные шрифты. Используйте Font.createFont() для загрузки пользовательских шрифтов. Возможно, вам придется нарисовать свой собственный JProgressbar. Переопределите JProgressBar.paintComponent(Graphics g) и нарисуйте собственное изображение.

2 голосов
/ 12 января 2010

Ну, это очень возможно, хотя многие разработчики Java Swing могут не согласиться с пользовательским интерфейсом в изображении. возможно, это правильно.

Хотя, чтобы сделать это очень возможным, попробуйте посмотреть на JWindow, JTable, ImageIcon, Dimension, JProgressBar. Вам также понадобится достаточное понимание Java Layouts и таких событий, как MouseEvents, ActionEvents.

.

Надеюсь, это поможет.

1 голос
/ 13 января 2010

Я бы порекомендовал

Макет MiG

для размещения компонентов, его очень легко понять, и он намного мощнее, чем стандартные менеджеры компоновки (и у него также есть хороший режим отладки).

1 голос
/ 12 января 2010

Это очень возможно, используя Swing .

Проверьте Графический интерфейс NetBeans

1 голос
/ 12 января 2010

Вам нужно будет создать множество пользовательских JComponents. Кроме этого, возможно.

0 голосов
/ 05 февраля 2019

Я не согласен с вами! На самом деле вы можете использовать NetBeans для создания такого GUI, Это просто тоже, у вас есть много вариантов для работы! Те, которые я лично использую:

1) Создайте графику с помощью программного обеспечения для рисования и установите для компонента значение Icon . Я использую для процесса проектирования InkScape , но любое программное обеспечение должно сработать. Вы должны быть осторожно осторожны в этом процессе, потому что вы не можете изменить размеры изображений в NetBeans (ну, я никогда не пробовал).

2) расширить UI класс (Пример: открытый класс CustomButtonUI extension BasicButtonUI) и переопределить метод нарисовать , затем использовать функцию setUI (componentName.setUI (new CustomButtonUI);)

Это пример кода:

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.AbstractButton;
import javax.swing.JComponent;
import javax.swing.plaf.basic.BasicButtonUI;

/**
 *
 * @author Ionut Cicio
 */
public class CustomButton extends BasicButtonUI{

    int borderThickness, edgeRoundness;

    @Override
    public void paint(Graphics g, JComponent c) {
        Graphics2D g2 = (Graphics2D)g;
        g2.setColor(c.getBackground());

        borderThickness = 2;
        edgeRoundness = 20;

        g2.setColor(c.getForeground());
        g2.fillRoundRect(0, 0, c.getWidth(), c.getHeight(), edgeRoundness+5, edgeRoundness+5);
        g2.drawRoundRect(0, 0, c.getWidth(), c.getHeight(), edgeRoundness+5, edgeRoundness+5);
        //g2.fillRect(0, 0, c.getWidth(), c.getHeight());
        //g2.drawRect(0, 0, c.getWidth(), c.getHeight());

        g2.setColor(c.getBackground());
        g2.fillRoundRect(borderThickness, borderThickness, c.getWidth()-(int)(borderThickness*2.5), c.getHeight()-(int)(borderThickness*2.5), edgeRoundness, edgeRoundness);
        g2.drawRoundRect(borderThickness, borderThickness, c.getWidth()-(int)(borderThickness*2.5), c.getHeight()-(int)(borderThickness*2.5), edgeRoundness, edgeRoundness);

        super.paint(g, c);
    }

    @Override
    protected void paintFocus(Graphics g, AbstractButton b, Rectangle viewRect, Rectangle textRect, Rectangle iconRect) {

    }
}

Всегда используется оба метода вместе , и это дает вам действительно большое преимущество при работе с анимациями !

Для некоторых типов UI как BasicTextFieldUI понимание того, как работает рисование, довольно сложно, но все же понятно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...