Создание окна Java без JFrame или AWT

1

Прежде всего, я хочу, чтобы вы знали, что я искал в Интернете, но ничего не мог найти. Я помню, что однажды увидел поток, но не смог найти его снова; это было давно.

Я хочу знать, как создать собственное окно без JFrame или AWT. Везде, где я ищу, я просто показываю библиотеку и готовый код, но я не могу понять, как он работает внутри. Я хочу знать, как построить окно, без того, что уже дала мне Java.

Хорошая вещь и плохая вещь в Java - это то, что Java упрощает работу разработчиков, поэтому я попробовал C, искал код сборки и пытался найти способ сделать это, но все подходы использовали библиотеки.

Вот почему, я хочу знать, это даже возможно? Вам не нужны все окна, просто база или даже пиксели на экране, но что-то, что не будет включать использование большего количества библиотек или создание классов, которые были созданы для этого, и все, используя только потому, что это единственное, что они знают,

Спасибо всем, кто поможет мне и ответит на мои вопросы :)

  • 2
    Java зависит от доступности функциональных возможностей, полученных из разных операционных систем, а доступные платформы AWT, Swing и JavaFX абстрагируют сложности и различия, возникающие между операционными системами, в удобный пакет, в котором разработчику больше не нужно заботиться о том, как Окно создано только для того, чтобы оно работало определенным образом. ЕДИНСТВЕННОЕ решение, которое вам нужно будет создать для себя, - использовать JNI / JNA. Тогда возникает вопрос: «Как бы вы нарисовали это окно?».
  • 1
    Вопрос поднимает больше вопросов. Если вы хотите сделать это, то. Зачем использовать Java? Почему бы не использовать нативные библиотеки, доступные на уровне операционной системы, используя такие языки, как C / Objective C / Swift, которые дают вам прямой доступ к системе? Если вы не собираетесь писать свою операционную систему, вы всегда будете работать через некоторый уровень API / библиотеки, вот в чем дело
Показать ещё 7 комментариев
Теги:
swing
awt
window

2 ответа

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

В Java мы зависим от привязок в родной ОС. Причина, по которой мы имеем абстрактные рамки, такие как AWT, Swing, JavaFX, SWT, состоит в том, что процесс, с помощью которого это выполняется, не является тривиальным, особенно если вы на самом деле хотите нарисовать эти поверхности каким-либо значимым образом и усугубляется, когда вы рассматриваете разные требования доступных операционных систем.

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

Ты мог...

Используйте JWindow или непараметризованный JFrame. Это дает вам доступную поверхность для рисования и подключение к готовой очереди событий (цикл сообщений).

Эти два окна представляют вам "пустой" прямоугольник без декораций. Имея дело с этими типами окон, вы можете предоставить свои собственные украшения напрямую или с помощью привычного внешнего вида.

Ты мог...

Используйте JNI (собственное) привязку непосредственно в операционной системе, что позволит вам попросить ОС создать собственное окно. Это означает, что вы несете ответственность за определение того, как вы собираетесь рисовать в окно, как вы собираетесь обрабатывать сообщения (события) из ОС, которые нацелены на ваше окно, и все другие соображения.

Взгляните на JNA Win32WindowDemo.java или если вы действительно хотите получить фанки, вы также можете взглянуть на...

как некоторые дополнительные привязки в встроенную графическую библиотеку

  • 0
    ты проверю и спасибо за ответ и помощь :)
-1

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

Это программа для ножниц из каменной бумаги, которую я сделал некоторое время назад, которая работает сразу же из панелей опций.

import java.util.Random;

import javax.swing.JOptionPane;

public class AI 
{
    public static void main(String[] args)
    {
    Random generator = new Random();
    int scan = 0;
    String bool = "";
    int rps;
    String type = "";
    int option;
    int counter = 0;
    String stuff = "";
    int cpu = 0;
    int foo = 0;
    int total = 0;
    while (true)
        {
        while(true)
        {



                type = JOptionPane.showInputDialog("Choose what game you would like to play. \n best of 3 \n best of 5 \n best of 7 \n first to 10");
                stuff = type.toLowerCase();
                if (stuff.equals ("best of 3"))
                {
                    option = JOptionPane.showConfirmDialog(null, "Play a best of 3 game?", "Exit", JOptionPane.YES_NO_OPTION);
                    break;
                }
                else if (stuff.equals ("best of 5"))
                {
                    option = JOptionPane.showConfirmDialog(null, "Play a best of 5 game?", "Exit", JOptionPane.YES_NO_OPTION);
                    break;
                }
                else if (stuff.equals ("best of 7"))
                {
                    option = JOptionPane.showConfirmDialog(null, "Play a best of 7 game?", "Exit", JOptionPane.YES_NO_OPTION);
                    break;
                }
                else if (stuff.equals ("first to 10"))
                {
                    option = JOptionPane.showConfirmDialog(null, "Play a game to 10?", "Exit", JOptionPane.YES_NO_OPTION);
                    break;
                }
                else
                {
                    continue;
                }
            }
            if (stuff.equals("best of 3"))
                foo = 3;
            else if (stuff.equals("best of 5"))
                foo = 5;
            else if (stuff.equals("best of 7"))
                foo = 7;
            else if (stuff.equals("first to 10"))
                foo = 10;
            for (int i = 0; i <= foo; i++)
            {
            while(true)
            {
            scan = Integer.parseInt(JOptionPane.showInputDialog ("Enter a number between 1 and 3. \n 1: rock\n 2: paper\n 3: scissors"));
            if (scan == 1)
                {
                    JOptionPane.showMessageDialog(null,"You chose rock.");
                    break;
                }
            else if (scan == 2)
                {
                    JOptionPane.showMessageDialog(null,"You chose paper.");
                    break;
                }
            else if (scan == 3)
                {
                    JOptionPane.showMessageDialog(null,"You chose scissors.");
                    break;
                }
            else
                {
                    JOptionPane.showMessageDialog(null,"Choose a valid number");
                    continue;
                }
            }
        rps = generator.nextInt(3) + 1; 
        String str;
        if (rps == 1)
            {
            str = "The cpu chose rock!";
            }
        else if (rps == 2)
            {
            str = "The cpu chose paper!";
            }
        else 
            {
            str = "The cpu chose scissors!";
            }
            JOptionPane.showMessageDialog(null,str);



            if (rps == 1 && scan == 2)
                {
                JOptionPane.showMessageDialog(null,"you won!");
                counter++;
                total++;

                }
            else if (rps == 2 && scan == 3)
            {
                JOptionPane.showMessageDialog(null,"you won!");
                counter++;
                total++;

            }
            else if (rps == 3 && scan == 1)
            {
                JOptionPane.showMessageDialog(null,"you won!");
                counter++;
                total++;

            }
            else if (rps == scan)
            {
                JOptionPane.showMessageDialog(null,"Try again!");
                continue;
            }
            else 
            {
                JOptionPane.showMessageDialog(null,"you lose!");
                cpu++;
                total++;

            }
            if(stuff.equals("best of 3") && counter == 2 || cpu ==2)
            {
                break;
            }
            else if (stuff.equals("best of 5") && counter==3 || cpu == 3)
            {
                break;
            }
            else if (stuff.equals("best of 7") && counter == 4 || cpu == 4)
            {
                break;
            }
            else if (stuff.equals("first to 10") && counter == 10 || cpu ==10)
            {
                break;
            }

        }




            bool = JOptionPane.showInputDialog ("do you want play another game? \n Type in yes or no");
            if (bool.equals("yes"))
                continue;
            else if (bool.equals("no"))
            break;

    }
    }

}

  • 1
    Но он все еще использует платформы AWT / Swing / Java ...
  • 0
    это не то, что я имею в виду, я хочу создать окна и знать, что я делаю, не брать уроки, которые мне дали, и использовать их, не зная, что я делаю

Ещё вопросы

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