1

多分あなたはここで私を助けることができます:)
私は10台のマシンステーションのように「シミュレート」したいです。私のJFrame/ Container(私は両方を試しました) に、これらの 10 個のマシン (= JPanelsx ボタン、テキストフィールド、任意のデザインを含む 10 個) を配置し、それぞれに異なる情報を持たせ、必要に応じて変更したいと考えています。

JTextFielda の値を anで変更しようとしましたJButton(マシンの優先度 + 1 を設定するようなものです。しかし、10 個の「優先度を上げる」ボタンを区別できません :(

どうやってそれをしますか?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「より高い」ボタンでの値を変更したいのですが、できません... このことを検索して試行するのに何時間もかかりましたが、何かを見つけることができませんでした。

手伝ってくれてどうもありがとう!
ベスト、アンドレア

4

1 に答える 1

2

オブジェクト、特にビュー (MVC など) をもっと操作する必要があります。ビューはオブジェクトを表します。この場合は、マシンのように見えます (名前、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();
            }
        });
    }
}
于 2012-11-14T23:37:48.353 に答える