Fonte do artigo: Entusiasta da Computação Autor: Zhang Jian
Quem sabe quanta areia e pedra foram usadas para construir a Torre de Babel? Quem sabe quantos dias e noites foram necessários para construir Roma? A única coisa que sabemos é que sem os tijolos e as pedras não existiria a Grande Muralha que se estende por milhares de quilómetros, sem a acumulação de pedras e argila, não existiriam pirâmides eternas. Percebe-se que a preparação de conhecimentos básicos é fundamental para aprendermos alguma coisa. Então, vamos começar entendendo algumas funções básicas do Swing e iniciar nosso grande projeto de construção de Roma!
Prefácio
O Java Café está aberto há muito tempo. Se você já gosta do sabor da xícara de café do Java, lembre-se de vir com frequência. Desta vez, preparamos uma xícara grande de café perfumado para todos - com base no desenvolvimento de um jogo "Lianliankan", aprenderemos com você como usar o Swing em Java. Quando você provar esta xícara de café com cuidado, eu irei. descobri que Java não só tem um sabor único na minha xícara de café, mas também aprendi como desenvolver jogos profissionais. É realmente o melhor dos dois mundos!
Para dar uma prévia, a imagem abaixo é uma captura de tela do jogo. Você pode baixar o jogo para experimentar (baixar o programa do jogo; baixar o arquivo de origem) e, em seguida, usar java -jar kyodai.jar para executá-lo no modo de linha de comando. Além disso, você também pode acessar minha página inicial http://www.ismyway.com para baixar a versão independente e a versão móvel deste jogo para teste (veja a Figura 1).
Java Cafe já introduziu o conhecimento do AWT antes, então qual é a diferença entre Swing e AWT? Qualquer pessoa que estuda Java já deve ter ouvido ou visto os termos controles pesados e controles leves. AWT é o que normalmente chamamos de controles pesados, e Swing é um controle leve. Todos nós sabemos que o slogan do Java é “escrever uma vez, executar em qualquer lugar”, o que também exige que usemos código Java puro tanto quanto possível em nossos programas. Infelizmente, o AWT depende de uma interface para a plataforma nativa, portanto, as interfaces feitas com o AWT podem parecer um pouco diferentes em diferentes sistemas operacionais. Swing é completamente diferente. Swing é escrito em Java puro. Portanto, a interface escrita em Swing pode garantir a mesma aparência em todas as plataformas. Aqui está outro truque: no JDK, para facilitar a diferenciação, todos os controles Swing começam com uma letra maiúscula J, como JButton (o equivalente correspondente no AWT é Button), para que você possa distinguir facilmente os controles Swing dos controles AWT.
Swing primeira experiência
Para quem quer aprender programação Swing, preparamos algumas dicas especialmente para você. Primeiramente é extremamente necessário baixar e ler o código. Como este é um tutorial sobre Swing, tentamos apenas explicar o máximo possível alguns conteúdos relacionados ao Swing. Conteúdos não relacionados ao Swing geralmente não serão abordados, como a parte do algoritmo. Em segundo lugar, devido às limitações de espaço, é impossível escrever todas as partes do código aqui, então você também precisa compará-lo com o código completo. Por fim, para facilitar o foco de todos no aprendizado do Swing, também colocamos no arquivo de download os recursos necessários para o desenvolvimento do jogo. Após o download, você pode compilá-lo e executá-lo e ver os resultados da execução.
1. Contêiner de nível superior
O que é um contêiner de nível superior? Quando usamos Java para programação gráfica, onde são desenhados os diagramas? Precisamos de um contêiner que possa fornecer desenhos gráficos. Esse contêiner é chamado de contêiner de nível superior. Você também pode considerá-lo uma janela. O contêiner de nível superior é a base para a programação gráfica. Todos os itens gráficos devem ser incluídos no contêiner de nível superior. No Swing, temos três contêineres de nível superior que podem ser utilizados, são eles:
・JFrame: Usado para projetar aplicativos semelhantes ao formato de janela em sistemas Windows.
・JDialog: Semelhante ao JFrame, exceto que JDialog é usado para projetar caixas de diálogo.
・JApplet: Usado para projetar miniaplicativos Java que podem ser incorporados em páginas da web.
Se precisarmos usar Swing para criar um programa de classe de janela, nosso código deverá ficar assim:
importar javax.swing.*;
classe pública KyodaiUI
estende JFrame {
…
}
2.Controles
Os controles são os elementos básicos que compõem a interface do aplicativo. Botões, caixas de texto, barras de progresso, etc., são todos controles. Os controles (aqui discutiremos apenas os controles visuais) podem ser divididos em controles de contêiner e controles não-contêiner. Literalmente entendido, um controle de contêiner é um controle especial que pode conter outros controles. Por exemplo, o controle JPanel em Java é um controle de contêiner. Podemos até colocar controles que não sejam de contêiner, como botões e caixas de texto. -controles de contêiner, como botões e caixas de texto no JPanel Coloque vários controles JPanel nele (é importante notar que o contêiner de nível superior também é um controle do tipo contêiner. Cada aplicativo de janela possui e só pode ter um contêiner de nível superior. controle Em outras palavras, o contêiner de nível superior não pode ser incluído em outros controles).
Existem muitos controles de contêiner em Java. Além do JPanel mencionado, também existem JTabbedPane, JScrollPane, etc. Os controles não-contêiner incluem JButton, JLabel, JTextField, etc. Se você precisar adicionar um controle a um controle de tipo de contêiner, poderá usar o método add(Component comp) para fazer isso, como:
Painel JPanel = novo JPanel();
botão JButton = new JButton();
painel.add(botão);
3. Disposição
O que é layout? Layout é um sistema de gerenciamento de interface usado em Java para controlar a disposição e posição dos controles. Pessoas que usaram outras linguagens de desenvolvimento de programação visual sempre sentirão que o design da interface Java é estranho quando entrarem em contato com ele pela primeira vez: não existe um método WYSIWYG para definir coordenadas de controle! No entanto, acontece que o próprio sistema de gerenciamento de layout fornecido pelo Java também pode atender bem às nossas necessidades e tem mais vantagens no desempenho de plataforma cruzada.
Os layouts comumente usados são:
・BorderLayout: Um sistema de gerenciamento que divide a interface em áreas superior, inferior, esquerda, direita e intermediária. No layout BorderLayout, você só pode colocar no máximo 5 controles. Se houver mais de 5 controles, é recomendável usar. outros sistemas de layout.
・GridLayout: GridLayout é um sistema de gerenciamento de layout que transforma a interface do usuário em um layout semelhante a um tabuleiro de xadrez. Se quisermos projetar um software de calculadora semelhante ao que vem com o Windows, GridLayout é sem dúvida a melhor escolha.
・FlowLayout: FlowLayout é diferente dos dois tipos de sistemas de gerenciamento de layout acima. No FlowLayout, você não precisa especificar onde colocar cada controle. Você só precisa adicionar os controles ao FlowLayout e o FlowLayout os colocará em ordem. a ordem em que você adiciona os controles O controle será quebrado automaticamente se não houver espaço suficiente.
Depois de ter uma compreensão básica desses sistemas de gerenciamento de layout, vamos abordar juntos o design de interface. Depois de observar cuidadosamente as configurações de "Lianliankan" nos jogos QQ, podemos descobrir que toda a interface está dividida em três áreas. A parte superior é a área do menu do sistema, a maior área é a área de jogo do usuário e também há uma interação do usuário. Áreas, cada área é composta por vários controles.
Com tantos controles, por onde começamos? Como outros controles podem ser colocados no controle do contêiner, só precisamos determinar o controle do contêiner a ser colocado primeiro. Agora que sabemos quantos controles de contêiner precisamos usar, vamos selecionar o sistema de gerenciamento de layout. Usar GridLayout? Parece um pouco forçado, usando FlowLayout? Existe uma opção melhor? Aliás, acho que você deve ter pensado no BorderLayout, conforme mostra a Figura 2 abaixo.
Antes de começar, todos devem estar atentos ao fato de que o design da interface deve primeiro considerar o tamanho, seja o tamanho da interface principal do programa ou o tamanho de cada área. Se o tamanho adequado não for projetado, será muito. doloroso mudá-lo no futuro.
A seguir está o programa de origem correspondente:
importar java.awt.*;
importar javax.swing.*;
classe pública KyodaiUI estende JFrame {
public KyodaUI() {
this.setSize(780, 500); //Defina o tamanho do formulário para 780*500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false); //O formulário não pode ser redimensionado
this.setTitle("Lianliankan"); //Definir o título
Barra de ferramentas JPanel = new JPanel();
toolBar.setBackground(Color.branco);
toolBar.setPreferredSize(nova Dimensão(780, 48));
JPanel actionPanel = new JPanel(); //Cria um novo controle do tipo JPanel
actionPanel.setBackground(Color.yellow); //Definir a cor de fundo
actionPanel.setPreferredSize(new Dimension(160, 380)); //Definir o tamanho
JPanel contentPanel = new JPanel();
contentPanel.setBackground(Color.azul);
contentPanel.setPreferredSize(nova Dimensão(620, 380));
this.getContentPane().add(toolBar, BorderLayout.NORTH);
this.getContentPane().add(actionPanel, BorderLayout.EAST);
this.getContentPane().add(contentPanel, BorderLayout.CENTER);
}
public static void main(String[] args) lança HeadlessException {
KyodaiUI kyodaiUI = new KyodaiUI();
kyodaiUI.show();
}
}
Vamos dar uma olhada em como funciona o programa acima. Em primeiro lugar, extends JFrame indica que ele é herdado do JFrame, que é o controle de contêiner de nível superior mais básico. Na verdade, no JDK, os controles que começam com a letra J são controles Swing. Em seguida, defina as propriedades do contêiner. Entre elas, setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) é usado para informar à máquina virtual Java para fechar o processo da janela quando o usuário clica no botão "Fechar" no canto superior direito do formulário. Se você não fizer isso, descobrirá que, embora possa clicar para fechar a janela, o programa não fecha. No código a seguir, adicionamos três contêineres Panel ao contêiner de nível superior. Deve-se notar que no AWT podemos escrevê-lo diretamente como add(toolBar, BorderLayout.NORTH), mas no Swing deve ser escrito como getContentPane() add(toolBar, BorderLayout.NORTH), caso contrário o programa irá. errado.
Agora você pode compilá-lo e executá-lo para ver se é igual ao resultado da minha execução (veja a Figura 3).
4. Fronteira
Embora usemos diferentes cores de primeiro plano para distinguir diferentes áreas, não há senso de hierarquia. Ficará muito mais bonito com uma borda.
Em Java, todos os controles Swing começando com J podem usar o método setBorder para definir bordas para si próprios. Existem muitos tipos de bordas, lineares, elevadas, côncavas e vazias. Você pode até combiná-las livremente para formar seu próprio estilo. Todas as Bordas devem ser criadas usando os métodos estáticos fornecidos em javax.swing.BorderFactory, como:
Borda borda = BorderFactory.createBevelBorder(BevelBorder.LOWERED,
novaCor(45, 92, 162),
novaCor(43, 66, 97),
novaCor(45, 92, 162),
nova Cor(84, 123, 200));
Agora mudamos toolBar.setBackground(Color.white) para toolBar.setBorder(border). O efeito tridimensional já apareceu?
Combate prático – escreva seu próprio nome
Agora temos uma interface funcional. Embora não possa fazer nada, não entre em pânico. Roma não foi construída em um dia.
Agora vamos fornecer um menu “Sobre” na área do menu para exibir informações do programa. Você não quer que outras pessoas saibam seu nome? O próprio Swing fornece um controle de botão JButton pronto. Precisamos apenas criar um novo botão: JButton about = new JButton("about"); Podemos adicionar o seguinte código: toolBar.add(about); Ei, por que não há resposta ao clicar no botão? Isso ocorre porque você não disse ao programa o que fazer ao clicar no botão. Para adicionar uma resposta de evento a um botão, primeiro você precisa usar about.addActionListener(this) para dizer ao programa para escutar eventos quando o botão for pressionado. Como ActionListener é uma interface de programa, também precisamos fazer um pouco. a declaração da classe. Modificação: classe pública KyodaiUI estende JFrame implementa ActionListener {...} O propósito de implementar a interface ActionListener é dizer ao programa que eu quero manipular eventos. Claro, finalmente temos que adicionar o código para responder ao evento:
public void actionPerformed(ActionEvent e) {
if (e.getSource() == sobre) {
JOptionPane.showMessageDialog(this, "Meu nome", "Sobre",
JOptionPane.INFORMATION_MESSAGE);
retornar ;
}
}
Entre eles, e.getSource() representa o controle que atualmente aciona o evento. Como muitas vezes há mais de um controle em nosso programa, esses controles podem gerar eventos, portanto devemos utilizar este método para encontrar o controle que gerou o evento.
resumo
Vamos revisar o que aprendemos hoje: Primeiro, entendemos o contêiner de nível superior e também sabemos que os controles são divididos em controles de contêiner e controles não-contêiner. Também sabemos como usar as bordas. um pequeno evento.
Nem é preciso dizer que você aprende e pratica à medida que avança, então deixe-me deixar alguns pequenos trabalhos de casa para ajudá-lo a consolidar o que aprendeu hoje: o botão que adicionamos acima está no meio da barra de menu e não é bonito. Por favor, coloque-o em Experimente à esquerda ou à direita.
Por fim, gostaria de fornecer alguns materiais de referência melhores:
●Criando uma GUI com JFC/Swing
http://java.sun.com/docs/books/tutorial/uiswing/index.html
●Gráficos 2D
http://java.sun.com/docs/books/tutorial/2d/index.html
●API JDK
http://java.sun.com/j2se/1.4.2/docs/api/index.html