Прежде всего, я хочу, чтобы вы знали, что я искал в Интернете, но ничего не мог найти. Я помню, что однажды увидел поток, но не смог найти его снова; это было давно.
Я хочу знать, как создать собственное окно без JFrame или AWT. Везде, где я ищу, я просто показываю библиотеку и готовый код, но я не могу понять, как он работает внутри. Я хочу знать, как построить окно, без того, что уже дала мне Java.
Хорошая вещь и плохая вещь в Java - это то, что Java упрощает работу разработчиков, поэтому я попробовал C, искал код сборки и пытался найти способ сделать это, но все подходы использовали библиотеки.
Вот почему, я хочу знать, это даже возможно? Вам не нужны все окна, просто база или даже пиксели на экране, но что-то, что не будет включать использование большего количества библиотек или создание классов, которые были созданы для этого, и все, используя только потому, что это единственное, что они знают,
Спасибо всем, кто поможет мне и ответит на мои вопросы :)
В Java мы зависим от привязок в родной ОС. Причина, по которой мы имеем абстрактные рамки, такие как AWT, Swing, JavaFX, SWT, состоит в том, что процесс, с помощью которого это выполняется, не является тривиальным, особенно если вы на самом деле хотите нарисовать эти поверхности каким-либо значимым образом и усугубляется, когда вы рассматриваете разные требования доступных операционных систем.
В зависимости от того, что вы на самом деле хотите достичь, будет зависеть от того, каким образом вы пойдете, например...
Используйте JWindow
или непараметризованный JFrame
. Это дает вам доступную поверхность для рисования и подключение к готовой очереди событий (цикл сообщений).
Эти два окна представляют вам "пустой" прямоугольник без декораций. Имея дело с этими типами окон, вы можете предоставить свои собственные украшения напрямую или с помощью привычного внешнего вида.
Используйте JNI (собственное) привязку непосредственно в операционной системе, что позволит вам попросить ОС создать собственное окно. Это означает, что вы несете ответственность за определение того, как вы собираетесь рисовать в окно, как вы собираетесь обрабатывать сообщения (события) из ОС, которые нацелены на ваше окно, и все другие соображения.
Взгляните на JNA Win32WindowDemo.java
или если вы действительно хотите получить фанки, вы также можете взглянуть на...
как некоторые дополнительные привязки в встроенную графическую библиотеку
вы можете просто использовать диалоговые окна сообщений. Я знаю, что я сделал программу, которая полностью бежала от них.
Это программа для ножниц из каменной бумаги, которую я сделал некоторое время назад, которая работает сразу же из панелей опций.
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;
}
}
}