新しく追加された JPanels に関係するすべての処理が、以前のように for ループ内ではなく、addBlock(..) と呼ばれる独自のメソッド内にあるように、JPanels 四角形を描画するペイントの for ループ メソッドを変更しました。私がそれをした後、JPanelsはもう表示されません。
基本的に、私がこのプログラムでやろうとしているのは、必要に応じて JPanel (60x60 ブロックで表される) を追加および削除できるようにすることです。そのため、私は ArrayList を使用しています... 後で paint() メソッドを呼び出すだけで、ArrayList にある要素の数に基づいて再描画されます。これは初期段階であり、私はまだ新しいので、より効率的な方法があるかどうかさえわかりません. 今のところ、私は物事を表示したいだけです。
これが私のコードです:
import java.awt.*;
import java.util.ArrayList;
import javax.swing.*;
class TestApp extends JFrame{
JFrame frame = new JFrame();
ArrayList<JPanel> grid = new ArrayList<JPanel>();
private static int amount = 10;
private void paint()
{
for(int i = 0, x = 0, y = 0; i < amount; i++, x += 62)
{
addBlock(i, x, y);
}
}
//Adds a block
private void addBlock(int index, int x, int y){
int height = 60;
int width = 60;
grid.add(new JPanel());
frame.add(grid.get(index));
(grid.get(index)).setVisible(true);
(grid.get(index)).setBounds(x, y, width, height);
}
//Removes a block
private void removeFrame(int index){
frame.remove(grid.get(index));
grid.remove(index);
}
//Default Constructor (sets up JFrame)
TestApp(){
frame.setLayout(null);
frame.setPreferredSize(new Dimension(600, 300));
frame.setTitle("Test Program");
frame.setBackground(Color.WHITE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setAlwaysOnTop(rootPaneCheckingEnabled);
frame.setResizable(true);
frame.setVisible(true);
}
public static void main(String [] args) {
TestApp program = new TestApp();
program.paint();
}
}
アイデアや提案はありますか?
編集:修正および改善されたコードは次のとおりです。まだ十分な調査を行っていないため、提案された他のことはまだ実装していません。
package my;
import java.awt.*;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.border.LineBorder;
class TestApp extends JFrame{
JFrame frame = new JFrame();
ArrayList<JButton> grid = new ArrayList<JButton>();
private static int amount = 46;
private static int counter = 0;
private void paintGrid()
{
for(int i = 0, y = 4; i < ((amount / 10) + (amount % 10)); i++, y += 104)
{
for(int j = 0, x = 4; j < 10 && (counter < amount); j++, x += 84)
{
addBlock(counter, x, y);
counter++;
}
}
}
//Adds a block
private void addBlock(int index, int x, int y){
int height = 100;
int width = 80;
grid.add(new JButton());
(grid.get(index)).setBackground(Color.YELLOW);
(grid.get(index)).setBorder(new LineBorder(Color.BLACK));
(grid.get(index)).setVisible(true);
(grid.get(index)).setBounds(x, y, width, height);
frame.add(grid.get(index));
}
//Removes a block
private void removeBlock(int index){
frame.remove(grid.get(index));
grid.remove(index);
}
//Default Constructor (sets up JFrame)
TestApp(){
frame.setLayout(null);
frame.setPreferredSize(new Dimension(850, 600));
frame.setTitle("Test Program");
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setAlwaysOnTop(rootPaneCheckingEnabled);
frame.setResizable(false);
frame.setVisible(true);
}
public static void main(String [] args) {
TestApp program = new TestApp();
program.paintGrid();
}
}