也许你可以帮帮我:)
我想像10个机器站一样“模拟”。在我的JFrame
/ Container
(我试过两个)中,我把这10个机器(= 10个JPanels
包含x个按钮,文本字段,无论我想要的设计),我想要有不同的关于每一个的信息并根据我的需要改变它们。
我尝试用JTextField
更改JButton
的值(比如设置机器的优先级+ 1。但我无法区分10“优先级”按钮:( / p>
你是怎么做到的?我的想法是以某种方式说出JPanel
它来自但我不能。
Container wizardFrame = new JFrame();
wizardFrame.setLayout(new GridLayout(2,5));
String Name;
for(int i = 1; i < 11; i++){
Name = "Maschine " + i;
fillWizardFrame(wizardFrame, Name, i);
}
wizardFrame.setVisible(true);
}
public void fillWizardFrame(Container wizardFrame, String Name, int i) {
JPanel MaschineId = new JPanel();
MaschineId.setLayout(new BorderLayout());
JTextField maschineName = new JTextField(Name ,10);
MaschineId.add(maschineName, BorderLayout.WEST);
maschinePrioritaet = new JTextField("20",10);
MaschineId.add(maschinePrioritaet,BorderLayout.CENTER);
JButton Higher = new JButton("Higher " + i); Higher.addActionListener(this);
MaschineId.add(Higher, BorderLayout.NORTH);
wizardFrame.add(MaschineId);
}
@Override
public void actionPerformed(ActionEvent event) {
if(event.getActionCommand().contains("Higher")){
System.out.println("Higher pressed " + event.getActionCommand());
}
// i tried .getID , .getSource etc... :/
}
我想用我的“更高”按钮更改maschinePrioritaet
的值,但我不能......这件事花了我几个小时的搜索和尝试但却找不到东西。
非常感谢你的帮助! 最好的,安德里亚
答案 0 :(得分:2)
你必须更多地使用对象,尤其是视图(比如MVC)。 View表示一个对象,在这种情况下,它看起来像某个机器(它是一个名称,一个id和一个优先级)。因此,您需要创建一个连接到该模型的机器面板。
这是更接近的事情(但仍有许多改进):
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Wizard {
public Wizard() {
JFrame wizardFrame = new JFrame();
wizardFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
wizardFrame.setLayout(new GridLayout(2, 5));
String name;
for (int i = 1; i < 11; i++) {
name = "Maschine " + i;
MashinePanel mashinePanel = new MashinePanel(name, i);
wizardFrame.add(mashinePanel.getPanel());
}
wizardFrame.pack();
wizardFrame.setVisible(true);
}
public static class MashinePanel implements ActionListener {
private final String name;
private final int id;
private JTextField maschineNameTF;
private JFormattedTextField maschinePrioritaetTF;
private JButton higher;
private JPanel machinePanel;
public MashinePanel(String name, int i) {
super();
this.name = name;
this.id = i;
machinePanel = new JPanel();
machinePanel.setLayout(new BorderLayout());
maschineNameTF = new JTextField(name, 10);
machinePanel.add(maschineNameTF, BorderLayout.WEST);
maschinePrioritaetTF = new JFormattedTextField(20);
maschinePrioritaetTF.setColumns(10);
machinePanel.add(maschinePrioritaetTF, BorderLayout.CENTER);
higher = new JButton("Higher " + i);
higher.addActionListener(this);
machinePanel.add(higher, BorderLayout.NORTH);
}
public JPanel getPanel() {
return machinePanel;
}
public String getName() {
return name;
}
public int getId() {
return id;
}
@Override
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().contains("Higher")) {
Object value = maschinePrioritaetTF.getValue();
int priority = 20;
if (value instanceof Integer) {
priority = (Integer) value;
}
maschinePrioritaetTF.setValue(priority + 1);
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Wizard();
}
});
}
}