question

adicionar ouvintes para mais botoes em java:?

Olá e tenha um bom dia todos! Minha pergunta é curta e simples. Aqui está o meu código:
javax.swing. de importação;
java.awt. de importação;
java.awt.event. de importação;
java.util. de importação;

public class windowFrame implementa ActionListener
{
privada JTextField firstField;
privada JTextField secondField;
privada JTextField thirdField;
Private JButton testButton;
Private JButton testButton2;
Private JButton testButton3;


public void buildWindow()
{
JFrame frame = novo JFrame();
Frame.setForeground(Color.White);
Frame.setDefaultCloseOperation (quadro.EXIT_ON_CLOSE);
Frame.setLocation (novo ponto (10, 50));
Frame.SetSize (nova dimensão (680, 620));
Frame.setTitle ("API gráfica");

JPanel Leste = novo JPanel (nova GridLayout(3,1));
East.Add (new JLabel ("teste de desenho de linha (colocar números de 4):"));
firstField = novo JTextField(10);
East.Add(firstField);
testButton = novo JButton("Test");
testButton.addActionListener(this);
East.Add(testButton);

JPanel east1 = novo JPanel (nova GridLayout(3,1));
east1.Add (new JLabel ("teste para desenhar um quadrado (inserir o ponto de partida e largura e comprimento):"));
secondField = novo JTextField(10);
east1.Add(secondField);
testButton2 = novo JButton("Test");
testButton2.addActionListener(this);
east1.Add(testButton2);

JPanel east2 = novo JPanel (nova GridLayout(3,1));
east2.Add (new JLabel ("digite seu nome2:"));
thirdField = novo JTextField(10);
east2.Add(thirdField);
testButton3 = novo JButton("Test");
testButton3.addActionListener(this);
east2.Add(testButton3);

JPanel norte = novo JPanel (nova BorderLayout());
North.Add (leste, BorderLayout.NORTH);
North.Add (east1, BorderLayout.CENTER);
North.Add (east2, BorderLayout.SOUTH);

JPanel north1 = novo JPanel (nova BorderLayout());
north1.Add (Norte, BorderLayout.EAST);
JPanel north2 = novo JPanel (nova FlowLayout());
north2.Add(north1);

Frame.Add (north2, BorderLayout.EAST);
/ / frame.pack(); //Trims afastado as peças extras do window(use carefully)
Frame.setVisible(true);
}
public void actionPerformed (ActionEvent event)
{
int [] array = novo int [4];
int i = 0;
String firstFieldtxt = firstField.getText();
Scanner entrada = novo Scanner(firstFieldtxt);
while(Input.hasNext())
{
matriz [i] = input.nextInt();
i + +;
}
aLine linha = novo aLine();
line.drawaLine (matriz [0], matriz [1], matriz [2], array[3]);
}
}

Eu tenho uma classe de meu próprio que faz a mesma coisa que g.drawLine(x,y,i,i); (que já existe em java).
O que eu quero: uma janela que tem no lado direito os botões e campos de texto e espaço em branco no lado esquerdo. Depois de inserir os 4 coords no primeiro campo e apertar o botão, o código obtém a Cadeia de caracteres, armazena os números em uma matriz e, em seguida, usa-los para desenhar a linha. Meus problemas são: como faço para colocar diferentes ouvintes nos botões (Im não tem certeza eu formulado o direito de pergunta...). Então o que eu quero é quando você clicar no botão 2, para fazer uma coisa completamente diferente (desenhe um retângulo usando outra classe personalizada de minas). Também, minha classe personalizada é bondoso estúpido cuz aquilo pops acima outro quadro: |. Aqui é a classe para o drawaLine:

java.awt. de importação;
javax.swing. de importação;

public class aLine extends JPanel {
Painel de DrawingPanel = novo DrawingPanel(400,400);
De elementos gráficos g = panel.getGraphics();

public void paintComponent (Graphics g) {
Super.paintComponent(g); / / chamada versão do JPanel
this.drawaLine (largura, largura, largura, largura);
}
public void drawaLine (int x 1, int y1, int x 2, int y2)
{
int dx = Math.abs(x2-x1);
int dy = Math.abs(y2-y1);
int sx, sy, err, e2, lineEnd = 0;

se (x 1<x2)></x2)>
SX = 1;
outra pessoa
SX = -1;

se (y1<y2)></y2)>
Sy = 1;
outra pessoa
Sy = -1;
Err = dx-dy;

while(lineEnd!=1)
{
g.drawRect (x 1, y1, 1, 1);
se (x 1 = = 2 x && y1 = = y2)
lineEnd = 1;
E2 = 2 err;
if(E2>-dy)
{
Err-= dy;
x 1 + = sx;
}
se (e2<dx)></dx)>
{
Err + = dx;
Y1 + = sy;
}
}
}
}

Você pode me ajudar com dois códigos? OBRIGADO CARGAS SHAWN!!! Ele é perfeito e muito bem explicada: m. poderia você me deixe seu id do yahoo apenas no caso eu tenho mais perguntas: S? Prometo que não vai incomodá-lo muito xD.
resposta Resposta
Há muitas maneiras de fazer o que você precisa, mas para o seu caso eu vou te mostrar 2 formas que duas alcançar o que você quer e você pode escolher qual deles usar.

Método 1)

você simplesmente adiciona alguns se condições ao método actionPerformed(event). a primeira coisa que você precisa é de qual botão foi clicado e você pode encontrar que usando o abaixo da linha:

JButton fonte = event.getSource() (JButton);

agora a fonte é o botão que foi clicado. então você simplesmente criar um se condicionar e comparar a fonte para cada um dos seus botões até chegar o um certo como abaixo:

se (source.equals (button1)) {//your código}

else if (source.equals (button2)) {//your código}

e assim por diante

Método 2)

Neste caso seu windowFrame classe principal não implementa ActionListener. em vez disso, você irá criar pequenas classes aninhadas que será implementa ActionListener. Você deve criar uma classe para cada um dos botões. Naturalmente isto não está escrito em pedra você pode compartilhar uma classe com botões como muitos como você deseja, mas isso geralmente acontece quando a função dos botões é muito semelhante. você vai aprender isso através da prática, mas agora vamos ver como seu feito. também você deve agora que você pode implementar esse método em classes normais, que ele não tem que ser e classe interna, classe interna é apenas a maneira mais comum de fazê-lo.

primeiro vamos ver qual classe aninhada significa. classe aninhada é exatamente o mesmo que qualquer outra classe. você define e usá-lo exatamente da mesma maneira. com uma diferença que você defini-la com outra classe. Você pode defini-la em público, protegido ou privado e podem estender e implementar qualquer coisa. Certifique-se de que se a classe aninhada não precisam ser acessados por outros privado definido, como abaixo:

public class OutterClass {

Classe privada {InnerClass01

Classe privada {InnerInnerClass

//even suas classes internas podem ter aninhados classe

}

}

Classe privada {InnerClass02

}

}

Isso é tudo que você precisa para agora, se você gostaria de saber mais sobre ele e aprender mais adiantamento coisas olhar o link tutorial abaixo.

Portanto, agora que você é de que classe aninhada basta seguir o modelo abaixo:

public class windowFrame {

Classe privada Button1ActionListener implementa ActionListener {

@ Override

public void actionPerformed (ActionEvent e) {

código //Your

}

}

Classe privada Button2ActionListener implementa ActionListener {

@ Override

public void actionPerformed (ActionEvent e) {

código //Your

}

}

//and assim por diante

}

tenho em mente, neste caso não há nenhuma necessidade para encontrar a fonte botão mais porque você atribuiu cada classe botão específico. no entanto se você compartilhou uma das classes com mais que um botão você deve encontrar o botão de fonte como no método um.

Então, qual método é melhor?

não há melhor método que tudo depende de seu código e quão complexa é a funcionalidade que existem no seu botão. dois é o melhor método se seu código é muito complicado e grande, desta forma você pode facilmente separar cada botão e têm um código muito limpo e você mesmo pode movê-lo para e fora da classe. Método um é muito simple e eu acho que sua a melhor maneira para seu código. Este assunto pode obter muito complicado e muito longo assim que eu estou indo para terminá-lo aqui. é você gostaria de saber que mais siga o link tutorial abaixo.

forneci uma versão revisada de trabalho de seu código com ambos os métodos nos links abaixo.

alguma sugestão sobre seu código:

1) classe nomes devem começar com letras maiúsculas e também todas as outras palavras no nome. Portanto windowFrame deve ser WindowFrame.

2) tente usar nomes significativos no seu código windowFrame, testButton e firstField são nomes terríveis. Você pode substituir windowFrame com empate (a função do seu código), teste o botão com jbDrawLine (diz-lhe o objeto é um JButton e é o que faz) e mesmo para firstField como jtfLineCoord.

3) se você fizer seu principal classe de gui no seu caso windowFrame não estende JFrame não há nenhuma necessidade de criar um objeto de quadro e chamar no quadro de cada vez, você pode ver isso em mais detalhes no meu código.

4) eu não sei se você esqueceu ou o que acontece, mas uma classe deve ter Construtor, sua boa prática sempre fazer um, você também precisa de um método main para executar seu código. todos estes são fixos no meu código.

5) sua classe aLine em 100% inútil, assim que eu o retirei.

Espero que estas foi útil para você

Boa sorte

não se esqueça de escolher a melhor resposta

ComentáriosComentários
Acho que a resposta não está correta ou que você gostaria de acrescentar mais
alguma informação? Envie o seu comentário abaixo..

Guest


HTML não é permitido!

Image Code

Digite os caracteres que aparecem na imagem por isso sabemos que você é humano!

Receber um email quando alguém acrescenta outro comentário a esta pergunta



Topo da página


Home  Terms
Copyright © Accelerated Ideas 2005-2024
All rights reserved