Witam, jestem w trakcie pisania swojego pierwszego "większego" projektu i nauki SWING'a. Napotkałem problem przy tworzeniu klawiatury ekranowej, a mianowicie wywoływania akcji przycisku. Czy jest jakiś sposób aby masowo (to jest np w pętli) nazwać kilka przycisków? Czy trzeba każdy przycisk klawiatury dodawać, nazywać i przypisywać mu akcję (jeśli naciśniesz przycisk "W" to napisz literkę "W") oddzielnie? Poniżej kod samej klawiatury. Metoda addRowOfKeys dodaje przyciski, ale bez konkretnej nazwy.
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class KeyboardPanel extends JPanel implements ActionListener {
public final int MAIN_FRAME_WIDTH = 480;
public final int MAIN_FRAME_HEIGHT = 800;
String alphabetFirstRow = "QWERTYUIOP";
String alphabetSecondRow = "ASDFGHJKL";
String alphabetThirdRow = "ZXCVBNM";
public KeyboardPanel() {
setPreferredSize(new Dimension(MAIN_FRAME_WIDTH, (int) (MAIN_FRAME_HEIGHT * 0.4)));
setLocation(0, MAIN_FRAME_HEIGHT / 2);
setBackground(Color.DARK_GRAY);
addKeyboardButtons();
setVisible(true);
}
private void addKeyboardButtons() {
addRowOfKeys(alphabetFirstRow);
addRowOfKeys(alphabetSecondRow);
addRowOfKeys(alphabetThirdRow);
}
private void addRowOfKeys(String alphabetRow) {
JPanel keysPanel = new JPanel(new GridLayout());
keysPanel.setSize(MAIN_FRAME_WIDTH, (int) (MAIN_FRAME_HEIGHT * 0.10));
for (int i = 0; i < alphabetRow.length(); i++) {
String letter = "" + alphabetRow.charAt(i);
JButton letterButton = new JButton(letter);
int buttonWidth = (int) (MAIN_FRAME_WIDTH * 0.1);
int buttonHeight = (int) (MAIN_FRAME_HEIGHT * 0.125);
letterButton.setMargin(new Insets(-buttonHeight, -buttonWidth, -buttonHeight, -buttonWidth));
letterButton.setPreferredSize(new Dimension(buttonWidth, buttonHeight));
letterButton.setFont(new Font("Arial", Font.PLAIN, 20));
letterButton.addActionListener(this);
keysPanel.add(letterButton);
}
add(keysPanel);
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source==letterButton(Color.RED));
}
}