[英]How can I make a Jbutton fill a JPanel so that there is no space between buttons?
我正在做這樣的事情:
JFrame frame = new JFrame();
frame.setSize(216, 272);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel jp = new JPanel();
GridLayout gl = new GridLayout(10, 2);
jp.setLayout(gl);
//this an an 18x18 png
Image img = ImageIO.read(new File("C:\\Users\\Josh\\workspace\\src\\red.png"));
for(int ii=0; ii < 20; ii++)
{
JPanel buttonPanel = new JPanel();
JButton jb1 = new JButton(new ImageIcon(img));
jb1.setBorder(BorderFactory.createEmptyBorder());
buttonPanel.add(jb1);
jp.add(buttonPanel);
}
frame.add(jp);
哪個產生:
無論我如何調整圖像大小或使用frame.size(),我都無法讓垂直間隙消失。 在一個塊的頂部和另一個塊的底部之間總是存在空間。
有誰知道如何刪除一個按鈕底部和下一個按鈕頂部之間的空格?
首先通過構造函數指定GridLayout
的垂直(和水平)間距。
接下來,你需要刪除按鈕的所有不需要的內容......
jb1.setMargin(new Insets(0, 0, 0, 0));
jb1.setContentAreaFilled(false);
jb1.setFocusPainted(false);
jb1.setBorder(new EmptyBorder(0, 0, 0, 0));
然后你應該被設置。
public class TestButtons {
public static void main(String[] args) {
new TestButtons();
}
public TestButtons() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new ButtonPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class ButtonPane extends JPanel {
public ButtonPane() {
setLayout(new GridLayout(10, 2, 0, 0));
BufferedImage img = new BufferedImage(18, 18, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = img.createGraphics();
g2d.setColor(Color.RED);
g2d.fillRect(0, 0, 18, 18);
g2d.dispose();
for (int ii = 0; ii < 20; ii++) {
JButton jb1 = new JButton(new ImageIcon(img));
jb1.setMargin(new Insets(0, 0, 0, 0));
// jb1.setBorderPainted(false);
jb1.setContentAreaFilled(false);
jb1.setFocusPainted(false);
jb1.setBorder(new EmptyBorder(0, 0, 0, 0));
add(jb1);
}
}
}
}
更新了各個面板
面板的默認布局是FlowLayout
,你需要一些不會添加更多填充的東西,比如BorderLayout
甚至GridBagLayout
for (int ii = 0; ii < 20; ii++) {
JButton jb1 = new JButton(new ImageIcon(img));
JPanel panel = new JPanel(new BorderLayout());
jb1.setMargin(new Insets(0, 0, 0, 0));
jb1.setContentAreaFilled(false);
jb1.setFocusPainted(false);
jb1.setBorder(new EmptyBorder(0, 0, 0, 0));
panel.add(jb1);
add(panel);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.