当我运行此代码时,我的Panel实例内部出现大约20 x 20像素而不是300,400我试图将其设置为。有人可以帮我找出原因吗?显然我对swing或java2D不是很有经验。感谢
编辑:我正在尝试以600,600尺寸显示电路板,并在内部显示尺寸为300,400的蓝色面板
//Application.java
import java.awt.EventQueue;
import javax.swing.JFrame;
import java.awt.*; //for Color
public class Application extends JFrame {
public Application() {
initUI();
}
private void initUI() {
//to put panels in here I have to write the class that defines them
//such as Board. Theyll all extend JPanel and import it!
Board brd = new Board();
setSize(600, 600);
setTitle("Application");
Panels inner = new Panels(300, 400);
brd.add(inner);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null); //Performed on JFrame
getContentPane().add(brd);
}
public static void main (String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Application ex = new Application();
ex.setVisible(true);
}
});
} //end main()
}
//Board.java
import javax.swing.JPanel;
public class Board extends JPanel {
public Board() {}
} //end Board
//Panels.java
import javax.swing.JPanel;
import java.awt.*;
public class Panels extends JPanel {
public int width;
public int height;
public Panels(int w, int h) {
width = w;
height = h;
setSize(w, h);
setBackground(Color.BLUE);
}
//methods
}
答案 0 :(得分:2)
首先,您需要阅读并理解Laying Out Components Within a Container ...
您遇到的问题是Board
默认使用FlowLayout
。您可以将其布局管理器更改为BorderLayout
,Panels
将填充可用空间。
像素完美布局是现代ui设计中的幻觉。影响组件个体大小的因素太多,您无法控制。 Swing旨在与布局管理器一起工作,放弃这些将导致问题和问题的终结,您将花费越来越多的时间来纠正
如果要在布局管理器中影响组件的大小,则应覆盖getPreferredSize
方法并返回所需的默认大小。
您应该在窗口上使用pack
,因为这将打包内容窗口,以便内容区域满足布局管理器指定的要求
答案 1 :(得分:0)
我认为当Swing用于游戏或“有趣”的动画时,前提是......你在JPanel上绘制组件。不实例化大量的JPanel并移动它们。这是我误解的内容!