我需要将BlackJack游戏构建为一个研究项目。
我想用SWING GUI构建它。我需要它只是将屏幕分为两部分,然后使用相对于指定部分的绝对(x,y)位置插入元素(在我的情况下,它是带有签名ImageIcon的扩展JButton)。
类似的东西:
我来自Android下的开发,你可以用非常简单的方式处理元素,我觉得在SWING中迷失了。有没有AbsoluteLayout或类似的东西?
以下是我多次尝试的一个例子:
public void run() {
// TODO Auto-generated method stub
JFrame jFrame = new JFrame("Blackjack");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container pane = jFrame.getContentPane();
Insets insets = pane.getInsets();
URL url = ClassLoader.getSystemClassLoader().getResource("10_of_clubs.png");
BufferedImage bi = null;
try {
bi = ImageIO.read(url);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Image resizedImage = bi.getScaledInstance(128, 186, 0);
ImageIcon icon = new ImageIcon(resizedImage);
ImageButton imgButton = new ImageButton(icon);
imgButton.setPreferredSize(new Dimension(128, 186));
ImageButton imgButton2 = new ImageButton(icon);
imgButton.setPreferredSize(new Dimension(128, 186));
pane.setLayout(new GridBagLayout());
JPanel headPanel = new JPanel();
JPanel headPanel2 = new JPanel();
GridBagConstraints cns = new GridBagConstraints();
cns.gridx = 0;
cns.gridy = 0;
cns.weightx = 0.5;
cns.weighty = 0.2;
cns.anchor = GridBagConstraints.FIRST_LINE_START;
cns.fill = GridBagConstraints.BOTH;
headPanel.setBackground(Color.RED);
headPanel.add(imgButton, cns);
GridBagConstraints cns2 = new GridBagConstraints();
cns2.gridx = 0;
cns2.gridy = 0;
cns2.weightx = 0.5;
cns2.weighty = 0.2;
cns2.anchor = GridBagConstraints.FIRST_LINE_START;
cns2.fill = GridBagConstraints.CENTER;
headPanel2.setBackground(Color.BLUE);
headPanel2.add(imgButton2, cns2);
pane.add(headPanel);
pane.add(headPanel2);
jFrame.setSize(800, 600);
jFrame.setVisible(true);
jFrame.setLocationRelativeTo(null);
}
我得到的是:
TNX。
答案 0 :(得分:0)
如果您想要绝对布局,请查看:http://docs.oracle.com/javase/tutorial/uiswing/layout/none.html 一般来说,阅读有关java中的布局,你可以看看: http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html 这里是所有java swing组件:visual guide: http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
我认为您可以使用JSplitPane(http://algo.math.ntua.gr/~symvonis/other-material/java_material/JavaTutorial/uiswing/components/splitpane.html)来创建垂直分离
答案 1 :(得分:0)
由于您有重叠元素,您可以:
将现有的JButtons与JLayeredPane内的图片一起使用。将您的卡放在不同的图层上以进行干净的渲染。使用'setBounds()'
使用Canvas自己绘制绝对位置的牌。如果采用这种方法,您还必须自己进行点击处理(检查点击是否在卡内。)