我有3节课。
我想创建一个JPanel
的3x3数组网格。
每个JPanel
包含JButton
s的3x3数组网格。 (它总共有81 JButton
像数独一样。)
问题在于,当我执行我的程序时,它没有显示所有JPanel
,只显示了几个JPanel
s(带有JButton
s)。
这是我的3个班的代码,我找不到问题所在......
Main
上课:
import javax.swing.JFrame;
public class Main {
public static Griglia g[][] = new Griglia[3][3];
public static void main(String[] args) {
JFrame f = new JFrame();
Listener lis = new Listener();
for(int i=0; i<3; i++)
{
for(int ii=0; ii<3; ii++)
{
g[i][ii]=new Griglia();
g[i][ii].setLocation(i*155,ii*155);
g[i][ii].repaint();
g[i][ii].addMouseListener(lis);
f.add(g[i][ii]);
g[i][ii].setVisible(true);
g[i][ii].repaint();
f.repaint();
}
}
f.setSize(470,500);
f.setVisible(true);
}
}
Griglia
上课:
import java.awt.*;
import javax.swing.*;
public class Griglia extends JPanel{
Casella c[][] = new Casella[3][3];
int flag=0;
public Griglia(){
this.setSize(150,150);
this.setLayout(null);
this.setBackground(Color.black);
for(int i=0; i<3; i++)
{
for(int ii=0; ii<3; ii++)
{
c[i][ii]=new Casella();
c[i][ii].setLocation(i*50, ii*50);
c[i][ii].repaint();
this.add(c[i][ii]);
this.repaint();
}
}
}
}
Casella
上课:
import java.awt.Color;
import javax.swing.JButton;
public class Casella extends JButton{
int flag=0;
public Casella(){
this.setSize(50,50);
this.setBackground(Color.LIGHT_GRAY);
this.setVisible(true);
}
}
答案 0 :(得分:2)
您的代码的基本问题是缺乏对布局管理API如何工作的理解。
对于初学者,JFrame
默认情况下使用BorderLayout
,这意味着,在您的情况下,只会显示添加的最后一个组件。
不建议尝试依赖null
布局,从长远来看,这将导致问题无法解决。
更好的解决方案是找到一个或多个帮助您实现解决方案的布局管理器,例如GridLayout
首先查看Laying Out Components Within a Container和How to Use GridLayout
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Main {
public static Griglia g[][] = new Griglia[3][3];
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(3, 3));
for (int i = 0; i < 3; i++) {
for (int ii = 0; ii < 3; ii++) {
g[i][ii] = new Griglia();
// g[i][ii].setLocation(i * 155, ii * 155);
// g[i][ii].repaint();
// g[i][ii].addMouseListener(lis);
frame.add(g[i][ii]);
// g[i][ii].setVisible(true);
// g[i][ii].repaint();
// f.repaint();
}
}
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
/////////////////////////////////////////////////////////////////////
public static class Griglia extends JPanel {
Casella c[][] = new Casella[3][3];
int flag = 0;
public Griglia() {
// this.setSize(150, 150);
// this.setLayout(null);
this.setBackground(Color.black);
setLayout(new GridLayout(3, 3));
for (int i = 0; i < 3; i++) {
for (int ii = 0; ii < 3; ii++) {
c[i][ii] = new Casella();
// c[i][ii].setLocation(i * 50, ii * 50);
// c[i][ii].repaint();
this.add(c[i][ii]);
// this.repaint();
}
}
}
}
////////////////////////////////////////////////////////////////////////////
public static class Casella extends JButton {
int flag = 0;
public Casella() {
// this.setSize(50, 50);
this.setBackground(Color.LIGHT_GRAY);
// this.setVisible(true);
}
}
}