1
スイング動的にJPanelを追加します。このような何か: こんにちは、私は、次のユーザー・インタフェースを持っていると思い
は私が空JFrame
でグリッドを生成することができていますが、私はそれが表示されますJFrame
内の複数の要素がある場合、それを追加しますが、非常に小さくしようとします。
これは私が試したコードです。クラスUITable
が動的にグリッドを追加するボタンや入力テキスト
public UITable(){
jfrm = new JFrame("Plants experiment");
jfrm.setLayout(new FlowLayout());
jfrm.setSize(1000, 1000);
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//JLabel titles for input texts
JLabel jlab_plants = new JLabel(" Enter nº plants: ");
JLabel jlab_time = new JLabel(" Enter evolution time: ");
jlab_prueba = new JLabel("");
//Input texts
jtf_plants = new JTextField(10);
jtf_plants.setActionCommand("numPlants");
jtf_time = new JTextField(10);
jtf_time.setActionCommand("time");
//Buttons
jbtnStart = new JButton("Start");
//Add components
jfrm.add(jlab_plants);
jfrm.add(jtf_plants);
jfrm.add(jlab_time);
jfrm.add(jtf_time);
jfrm.add(jbtnStart);
jfrm.add(jlab_prueba);
//Set visibility
jfrm.setVisible(true);
}
を作成します。
@Override
public void actionPerformed(ActionEvent ae) {
// ...
this.view.jfrm.add(new Grid());
this.view.jfrm.revalidate();
this.view.jfrm.repaint();
}
これは、グリッドのクラスです:事前に
public class Grid extends JPanel{
//Change Point to Plant in order to have a different color for each object
private List<Plant> fillCells;
public Grid() {
//fillCells = new ArrayList<>(25);
fillCells = PlantsControler.myPlants;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println("Width: "+getWidth()+" Height: "+ getHeight());
---- //Returns Width: 10 Height: 10 ------
g.clearRect(0, 0, getWidth(), getHeight());
for (Plant fillCell : fillCells) {
int cellX = 10 + (fillCell.getX() * 10);
int cellY = 10 + (fillCell.getY() * 10);
g.setColor(fillCell.getColor());
g.fillRect(cellX, cellY, 10, 10);
}
g.setColor(Color.BLACK);
g.drawRect(10, 10, 800, 500);
for (int i = 10; i <= 800; i += 10) {
g.drawLine(i, 10, i, 510);
}
for (int i = 10; i <= 500; i += 10) {
g.drawLine(10, i, 810, i);
}
}
public void fillCell(int x, int y, Color color) {
fillCells.add(new Plant(x, y, color));
repaint();
}
public void fillCell(Plant plant){
fillCells.add(plant);
repaint();
}
public void fillCell(){
repaint();
}
public void clearGrid(){
fillCells.clear();
}
感謝!
1)[ 'CardLayout'(http://download.oracle.com/javase/8/docs/api/java/awt/CardLayout.html)[この回答]に示すように、(使用http://stackoverflow.com/a/5786005/418556)。最初のイメージは、最初のカードとして空白のパネルを置くことによって実現されます。 2)すぐに助けを得るために、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 3) 'public class GridはJPanelを継承します。{'このコンポーネントは、レイアウトに対する提案として 'getPreferredSize()'をオーバーライドする必要があります。 –
このユーザインタフェースには動的JPanelは必要ありません。空のグリッドを表示して、空白のグリッドを表示して、フィールドに記入するときにユーザーが何を期待するかを知ることができます。一般的に、Swingコンポーネントを作成し、Swingコンポーネントを使用します。 –
@Andrew Thompson、あなたの答えと助言に感謝します。私はgetPreferredsize()をオーバーライドするだけでそれを行うことができました。 CardLayoutを使用した場合、どんな利点がありますか? – Spirrow