Java Swing布局问题&;代码优化
为了训练Java,我编写了自己的程序。 我喜欢玩CSGO,我们永远无法决定玩什么地图。 所以我想写一个程序,你可以选择你想要的地图,然后它会随机给出每个地图,并且只给出一次 还有一点,但代码已经在工作了 我已经用IntelliJ(我的IDE)的Swing表单生成器尝试过一次了, 但由于我不太明白它在那里做了什么,我想手工重做。所以我重写了程序,但是我不能让它看起来正常 我对IntelliJ Swing Builder的第一次尝试:Java Swing布局问题&;代码优化,java,swing,user-interface,layout-manager,gridbaglayout,Java,Swing,User Interface,Layout Manager,Gridbaglayout,为了训练Java,我编写了自己的程序。 我喜欢玩CSGO,我们永远无法决定玩什么地图。 所以我想写一个程序,你可以选择你想要的地图,然后它会随机给出每个地图,并且只给出一次 还有一点,但代码已经在工作了 我已经用IntelliJ(我的IDE)的Swing表单生成器尝试过一次了, 但由于我不太明白它在那里做了什么,我想手工重做。所以我重写了程序,但是我不能让它看起来正常 我对IntelliJ Swing Builder的第一次尝试: 没有GUIBuilder的帮助,现在看起来是这样的: 所以我在
没有GUIBuilder的帮助,现在看起来是这样的:
所以我在谷歌上搜索了几个小时才找到正确的布局。目前我正在使用GridBagLayout(似乎最适合我的需要)。但我不能把它弄对。它应该看起来像第一张图片 因此,问题1: GridBag有很多未使用的空间和东西,我做错了什么 问题2:我知道在代码方面还有很多需要改进的地方,你有什么建议? 我仍然不知道什么时候可以使用私有和访问方法和内容, 那么,是否存在任何至关重要的错误 这是我的密码: 其三类: 首先
弗斯特 主类(仅用于启动) **Swing大型机:**
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class MainFrame extends JFrame {
ImageIcon dust2;
public MainFrame(String title) {
super(title);
GridLayout gridMain = new GridLayout(10, 10, 5, 5);
GridLayout gridCB = new GridLayout(3, 5, 5, 5);
GridLayout gridButton = new GridLayout(1, 1, 10, 10);
JPanel mainPanel = new JPanel();
mainPanel.setLayout(gridMain);
mainPanel.setBackground(Color.DARK_GRAY);
JPanel checkboxPanel = new JPanel();
checkboxPanel.setLayout(gridCB);
checkboxPanel.setBackground(Color.DARK_GRAY);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(gridButton);
buttonPanel.setBackground(Color.DARK_GRAY);
JPanel labelPanel = new JPanel();
labelPanel.setBackground(Color.DARK_GRAY);
mainPanel.add(checkboxPanel);
mainPanel.add(buttonPanel);
mainPanel.add(labelPanel);
MapRound map = new MapRound();
//GridBagConstraints gbc = new GridBagConstraints();
GridBagConstraints gbc2 = new GridBagConstraints();
GridBagConstraints gbc3 = new GridBagConstraints();
gbc2.weighty = 0.5;
gbc2.weightx = 0.5;
gbc3.weightx = 1;
gbc3.weighty = 1;
gbc3.fill = GridBagConstraints.ABOVE_BASELINE;
//Checkboxes
JCheckBox dust2CB = new JCheckBox("Dust II");
dust2CB.setBackground(Color.DARK_GRAY);
dust2CB.setForeground(Color.LIGHT_GRAY);
gbc2.gridx = 0;
gbc2.gridy = 0;
checkboxPanel.add(dust2CB, gbc2);
dust2CB.setSelected(false);
JCheckBox trainCB = new JCheckBox("Train");
trainCB.setBackground(Color.DARK_GRAY);
trainCB.setForeground(Color.LIGHT_GRAY);
gbc2.gridx = 0;
gbc2.gridy = 1;
checkboxPanel.add(trainCB, gbc2);
trainCB.setSelected(false);
JCheckBox mirageCB = new JCheckBox("Mirage");
mirageCB.setBackground(Color.DARK_GRAY);
mirageCB.setForeground(Color.LIGHT_GRAY);
gbc2.gridx = 0;
gbc2.gridy = 2;
checkboxPanel.add(mirageCB, gbc2);
mirageCB.setSelected(false);
JCheckBox infernoCB = new JCheckBox("Inferno");
infernoCB.setBackground(Color.DARK_GRAY);
infernoCB.setForeground(Color.LIGHT_GRAY);
gbc2.gridx = 1;
gbc2.gridy = 0;
checkboxPanel.add(infernoCB, gbc2);
infernoCB.setSelected(false);
JCheckBox cobblestoneCB = new JCheckBox("Cobblestone");
cobblestoneCB.setBackground(Color.DARK_GRAY);
cobblestoneCB.setForeground(Color.LIGHT_GRAY);
gbc2.gridx = 1;
gbc2.gridy = 1;
checkboxPanel.add(cobblestoneCB, gbc2);
cobblestoneCB.setSelected(false);
JCheckBox overpassCB = new JCheckBox("Overpass");
overpassCB.setBackground(Color.DARK_GRAY);
overpassCB.setForeground(Color.LIGHT_GRAY);
gbc2.gridx = 1;
gbc2.gridy = 2;
checkboxPanel.add(overpassCB, gbc2);
overpassCB.setSelected(false);
JCheckBox cacheCB = new JCheckBox("Cache");
cacheCB.setBackground(Color.DARK_GRAY);
cacheCB.setForeground(Color.LIGHT_GRAY);
gbc2.gridx = 2;
gbc2.gridy = 0;
checkboxPanel.add(cacheCB, gbc2);
cacheCB.setSelected(false);
JCheckBox aztecCB = new JCheckBox("Aztec");
aztecCB.setBackground(Color.DARK_GRAY);
aztecCB.setForeground(Color.LIGHT_GRAY);
gbc2.gridx = 2;
gbc2.gridy = 1;
checkboxPanel.add(aztecCB, gbc2);
aztecCB.setSelected(false);
JCheckBox dustCB = new JCheckBox("Dust");
dustCB.setBackground(Color.DARK_GRAY);
dustCB.setForeground(Color.LIGHT_GRAY);
gbc2.gridx = 2;
gbc2.gridy = 2;
checkboxPanel.add(dustCB, gbc2);
dustCB.setSelected(false);
JCheckBox vertigoCB = new JCheckBox("Vertigo");
vertigoCB.setBackground(Color.DARK_GRAY);
vertigoCB.setForeground(Color.LIGHT_GRAY);
gbc2.gridx = 3;
gbc2.gridy = 0;
checkboxPanel.add(vertigoCB, gbc2);
vertigoCB.setSelected(false);
JCheckBox nukeCB = new JCheckBox("Nuke");
nukeCB.setBackground(Color.DARK_GRAY);
nukeCB.setForeground(Color.LIGHT_GRAY);
gbc2.gridx = 3;
gbc2.gridy = 1;
checkboxPanel.add(nukeCB, gbc2);
nukeCB.setSelected(false);
JCheckBox officeCB = new JCheckBox("Office");
officeCB.setBackground(Color.DARK_GRAY);
officeCB.setForeground(Color.LIGHT_GRAY);
gbc2.gridx = 3;
gbc2.gridy = 2;
checkboxPanel.add(officeCB, gbc2);
officeCB.setSelected(false);
JCheckBox italyCB = new JCheckBox("Italy");
italyCB.setBackground(Color.DARK_GRAY);
italyCB.setForeground(Color.LIGHT_GRAY);
gbc2.gridx = 9;
gbc2.gridy = 0;
checkboxPanel.add(italyCB, gbc2);
italyCB.setSelected(false);
JCheckBox assaultCB = new JCheckBox("Assault");
assaultCB.setBackground(Color.DARK_GRAY);
assaultCB.setForeground(Color.LIGHT_GRAY);
gbc2.gridx = 9;
gbc2.gridy = 1;
checkboxPanel.add(assaultCB, gbc2);
assaultCB.setSelected(false);
JCheckBox militiaCB = new JCheckBox("Militia");
militiaCB.setBackground(Color.DARK_GRAY);
militiaCB.setForeground(Color.LIGHT_GRAY);
gbc2.gridx = 9;
gbc2.gridy = 2;
checkboxPanel.add(militiaCB, gbc2);
militiaCB.setSelected(false);
//Buttons
JButton startButton = new JButton("Start");
startButton.setBackground(Color.DARK_GRAY);
startButton.setForeground(Color.LIGHT_GRAY);
gbc3.gridx = 0;
gbc3.gridy = 0;
gbc3.insets = new Insets(10, 10, 10, 10);
startButton.setPreferredSize(new Dimension(400, 400));
buttonPanel.add(startButton, gbc3);
JButton newmapButton = new JButton("New Map");
newmapButton.setBackground(Color.DARK_GRAY);
newmapButton.setForeground(Color.LIGHT_GRAY);
gbc3.gridx = 0;
gbc3.gridy = 1;
gbc3.weightx = 1.0;
gbc3.weighty = 1.0;
gbc3.insets = new Insets(0, 0, 10, 10);
buttonPanel.add(newmapButton, gbc3);
newmapButton.setEnabled(false);
JButton resetButton = new JButton("Reset");
resetButton.setBackground(Color.DARK_GRAY);
resetButton.setForeground(Color.LIGHT_GRAY);
gbc3.gridx = 0;
gbc3.gridy = 3;
gbc3.insets = new Insets(0, 0, 10, 10);
buttonPanel.add(resetButton, gbc3);
resetButton.setEnabled(false);
//Labels
JLabel result = new JLabel("Press START to begin");
gbc3.gridx = 0;
gbc3.gridy = 4;
gbc3.insets = new Insets(0, 0, 10, 10);
labelPanel.add(result, gbc3);
//Verhalten
dust2CB.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (dust2CB.isSelected()) {
map.mList.add("DustII");
} else {
map.removeMap("DustII");
}
}
});
trainCB.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (trainCB.isSelected()) {
map.mList.add("Train");
} else {
map.removeMap("Train");
}
}
});
mirageCB.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (mirageCB.isSelected()) {
map.mList.add("Mirage");
} else {
map.removeMap("Mirage");
}
}
});
infernoCB.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (infernoCB.isSelected()) {
map.mList.add("Inferno");
} else {
map.removeMap("Inferno");
}
}
});
cobblestoneCB.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (cobblestoneCB.isSelected()) {
map.mList.add("Cobblestone");
} else {
map.removeMap("Cobblestone");
}
}
});
overpassCB.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (overpassCB.isSelected()) {
map.mList.add("Overpass");
} else {
map.removeMap("Overpass");
}
}
});
cacheCB.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (cacheCB.isSelected()) {
map.mList.add("Cache");
} else {
map.removeMap("Cache");
}
}
});
aztecCB.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (aztecCB.isSelected()) {
map.mList.add("Aztec");
} else {
map.removeMap("Aztec");
}
}
});
dustCB.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (dustCB.isSelected()) {
map.mList.add("Dust");
} else {
map.removeMap("Dust");
}
}
});
vertigoCB.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (vertigoCB.isSelected()) {
map.mList.add("Vertigo");
} else {
map.removeMap("Vertigo");
}
}
});
nukeCB.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (nukeCB.isSelected()) {
map.mList.add("Nuke");
} else {
map.removeMap("Nuke");
}
}
});
officeCB.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (officeCB.isSelected()) {
map.mList.add("Office");
} else {
map.removeMap("Office");
}
}
});
italyCB.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (italyCB.isSelected()) {
map.mList.add("Italy");
} else {
map.removeMap("Italy");
}
}
});
assaultCB.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (assaultCB.isSelected()) {
map.mList.add("Assault");
} else {
map.removeMap("Assault");
}
}
});
militiaCB.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (militiaCB.isSelected()) {
map.mList.add("Militia");
} else {
map.removeMap("Militia");
}
}
});
startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e2) {
if (map.mList.size() == 0) {
JOptionPane.showMessageDialog
(null, "Please add one or more maps to the selection pool!");
} else {
map.scambleMap();
startButton.setEnabled(false);
newmapButton.setEnabled(true);
resetButton.setEnabled(true);
dust2CB.setEnabled(false);
trainCB.setEnabled(false);
mirageCB.setEnabled(false);
infernoCB.setEnabled(false);
cobblestoneCB.setEnabled(false);
overpassCB.setEnabled(false);
cacheCB.setEnabled(false);
aztecCB.setEnabled(false);
dustCB.setEnabled(false);
vertigoCB.setEnabled(false);
nukeCB.setEnabled(false);
officeCB.setEnabled(false);
italyCB.setEnabled(false);
assaultCB.setEnabled(false);
militiaCB.setEnabled(false);
}
}
});
newmapButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e2) {
boolean preventloop = true;
try {
while (preventloop) {
String xyz = map.nextMap();
result.setText("<html><font size=10><font color=green>
"+ xyz + </font></font></html>");
preventloop = false;
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null,
"You played all maps!\nThe game has been reset");
map.resetStatus();
result.setText("Press START to begin");
newmapButton.setEnabled(false);
startButton.setEnabled(true);
dust2CB.setEnabled(true);
trainCB.setEnabled(true);
mirageCB.setEnabled(true);
infernoCB.setEnabled(true);
cobblestoneCB.setEnabled(true);
overpassCB.setEnabled(true);
cacheCB.setEnabled(true);
aztecCB.setEnabled(true);
dustCB.setEnabled(true);
vertigoCB.setEnabled(true);
nukeCB.setEnabled(true);
officeCB.setEnabled(true);
italyCB.setEnabled(true);
assaultCB.setEnabled(true);
militiaCB.setEnabled(true);
}
}
});
resetButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
map.resetStatus();
result.setText("Press START to begin");
newmapButton.setEnabled(false);
startButton.setEnabled(true);
dust2CB.setEnabled(true);
trainCB.setEnabled(true);
mirageCB.setEnabled(true);
infernoCB.setEnabled(true);
cobblestoneCB.setEnabled(true);
overpassCB.setEnabled(true);
cacheCB.setEnabled(true);
aztecCB.setEnabled(true);
dustCB.setEnabled(true);
vertigoCB.setEnabled(true);
nukeCB.setEnabled(true);
officeCB.setEnabled(true);
italyCB.setEnabled(true);
assaultCB.setEnabled(true);
militiaCB.setEnabled(true);
}
});
this.add(mainPanel);
this.setVisible(true);
}
}
}
如果你有任何想法或建议,我很高兴听到 查看您的代码,我看到正在使用
GridLayout
布局管理器(而不是gridbagloayout
)。虽然名字很相似,但他们的行为却大不相同。这也意味着,将组件添加到其中一个面板时传递的gridbagstraints
对象将无法正确理解。(如果布局管理器在传递它无法处理的约束
对象时给出错误消息,那就太好了。)
有关这两个(和其他)布局管理器的更多信息,请参见此示例
我认为BoxLayout
layout管理器和一些面板周围的空白边框对您的程序也很有用。您可以使用标签在GUI的顶部和底部显示图像。我认为所有gridbagstraints
相关的代码都可以删除。示例屏幕截图:
您的大型机
类可以这样修改:
public class MainFrame extends JFrame {
//ImageIcon dust2;
public MainFrame(String title) {
super(title);
//GridLayout gridMain = new GridLayout(5, 0, 5, 5);
GridLayout gridCB = new GridLayout(3, 5, 5, 5);
//GridLayout gridButton = new GridLayout(4, 1, 10, 10);
JPanel mainPanel = new JPanel();
BoxLayout mainLayout = new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS);
mainPanel.setLayout(mainLayout);
mainPanel.setBackground(Color.DARK_GRAY);
JPanel checkboxPanel = new JPanel();
checkboxPanel.setLayout(gridCB);
checkboxPanel.setBackground(Color.DARK_GRAY);
JPanel buttonPanel = new JPanel();
BoxLayout buttonLayout = new BoxLayout(buttonPanel, BoxLayout.PAGE_AXIS);
buttonPanel.setLayout(buttonLayout);
buttonPanel.setBorder(new EmptyBorder(6, 6, 6, 6));
buttonPanel.setBackground(Color.DARK_GRAY);
JPanel labelPanel = new JPanel();
labelPanel.setBackground(Color.DARK_GRAY);
String directory = "directory/to/images/";
JPanel topImagePanel = new JPanel();
topImagePanel.setBackground(Color.DARK_GRAY);
topImagePanel.setBorder(new EmptyBorder(6, 6, 6, 6));
String topImagePath = directory + "map selector - top.png";
topImagePanel.add(new JLabel(new ImageIcon(topImagePath)));
JPanel bottomImagePanel = new JPanel();
bottomImagePanel.setBackground(Color.DARK_GRAY);
bottomImagePanel.setBorder(new EmptyBorder(6, 6, 6, 6));
String bottomImagePath = directory + "map selector - bottom.png";
bottomImagePanel.add(new JLabel(new ImageIcon(bottomImagePath)));
mainPanel.add(topImagePanel);
mainPanel.add(checkboxPanel);
mainPanel.add(buttonPanel);
mainPanel.add(labelPanel);
mainPanel.add(bottomImagePanel);
// [...]
//Buttons
JButton startButton = new JButton("Start");
startButton.setBackground(Color.DARK_GRAY);
startButton.setForeground(Color.LIGHT_GRAY);
gbc3.gridx = 0;
gbc3.gridy = 0;
gbc3.insets = new Insets(10, 10, 10, 10);
startButton.setPreferredSize(new Dimension(400, 400));
buttonPanel.add(startButton, gbc3);
startButton.setAlignmentX(Component.CENTER_ALIGNMENT);
buttonPanel.add(Box.createRigidArea(new Dimension(0, 6)));
JButton newmapButton = new JButton("New Map");
newmapButton.setBackground(Color.DARK_GRAY);
newmapButton.setForeground(Color.LIGHT_GRAY);
gbc3.gridx = 0;
gbc3.gridy = 1;
gbc3.weightx = 1.0;
gbc3.weighty = 1.0;
gbc3.insets = new Insets(0,0,10,10);
buttonPanel.add(newmapButton, gbc3);
newmapButton.setAlignmentX(Component.CENTER_ALIGNMENT);
newmapButton.setEnabled(false);
buttonPanel.add(Box.createRigidArea(new Dimension(0, 6)));
JButton resetButton = new JButton("Reset");
resetButton.setBackground(Color.DARK_GRAY);
resetButton.setForeground(Color.LIGHT_GRAY);
gbc3.gridx = 0;
gbc3.gridy = 3;
gbc3.insets = new Insets(0,0,10,10);
buttonPanel.add(resetButton, gbc3);
resetButton.setAlignmentX(Component.CENTER_ALIGNMENT);
resetButton.setEnabled(false);
// [...]
}
}
编辑:为您的代码提供一些一般建议
- 大型机的构造函数非常大。我会把它分成更小的方法来创建不同的面板和添加监听器
- 搜索类似的代码片段,看看是否可以创建一个可重用的方法。例如:有三段代码将所有复选框设置为禁用或启用。您可以创建一个带有布尔参数的方法来调用所有复选框的
setEnabled
- 创建复选框目前需要大量代码。如果您有一个游戏地图列表,您可以在循环中创建复选框。(这是在代码中创建GUI的一个很好的优势。)如果使用每个复选框的name属性,它们可以共享相同的
。最后,如果将所有复选框存储在列表中,则可以轻松禁用或启用所有复选框ItemListener
java.util.List<String> gameMaps = Arrays.asList(
"Dust II", "Train", "Mirage", "Inferno", "Cobblestone", "Overpass",
"Cache", "Aztec", "Dust", "Vertigo", "Nuke", "Office", "Italy",
"Assault", "Militia"
);
ItemListener mapCheckBoxListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent itemEvent) {
JCheckBox checkBox = (JCheckBox) itemEvent.getSource();
if (checkBox.isSelected()) {
map.mList.add(checkBox.getName());
} else {
map.removeMap(checkBox.getName());
}
}
};
java.util.List<JCheckBox> mapCheckBoxes = new ArrayList<>();
for (String gameMap : gameMaps) {
JCheckBox mapCheckBox = new JCheckBox(gameMap);
mapCheckBox.setName(gameMap);
mapCheckBox.setBackground(Color.DARK_GRAY);
mapCheckBox.setForeground(Color.LIGHT_GRAY);
checkboxPanel.add(mapCheckBox);
mapCheckBox.setSelected(false);
mapCheckBox.addItemListener(mapCheckBoxListener);
mapCheckBoxes.add(mapCheckBox);
}
// [....]
private void setMapsEnabled(java.util.List<JCheckBox> mapCheckBoxes, boolean enabled) {
for (JCheckBox mapCheckBox : mapCheckBoxes) {
mapCheckBox.setEnabled(enabled);
}
}
java.util.List gameMaps=Arrays.asList(
“尘埃II”、“火车”、“海市蜃楼”、“地狱”、“鹅卵石”、“天桥”,
“缓存”,“阿兹特克”,“灰尘”,“眩晕”,“核武器”,“办公室”,“意大利”,
“攻击”、“民兵”
);
ItemListener mapCheckBoxListener=新建ItemListener(){
@凌驾
公共无效itemStateChanged(ItemEvent ItemEvent){
JCheckBox checkBox=(JCheckBox)itemEvent.getSource();
if(checkBox.isSelected()){
map.mList.add(checkBox.getName());
}否则{
removeMap(checkBox.getName());
}
}
};
java.util.List MapCheckBox=新建ArrayList();
用于(字符串游戏地图:游戏地图){
JCheckBox mapCheckBox=新的JCheckBox(游戏地图);
设置名称(游戏地图);
mapCheckBox.setBackground(颜色:深灰色);
mapCheckBox.setForeground(颜色:浅灰色);
checkboxPanel.add(mapCheckBox);
mapCheckBox.setSelected(false);
addItemListener(mapCheckBoxListener);
mapCheckBox.add(mapCheckBox);
}
// [....]
私有void setMapsEnabled(java.util.List映射复选框,启用布尔值){
用于(JCheckBox-mapCheckBox:mapCheckBox){
mapCheckBox.setEnabled(已启用);
}
}
编辑按钮应位于标记(java swing用户界面等)的正下方,位于共享和标志之间。@FabianK不要将代码添加为答案。请编辑你的问题。我删掉了你所有的介绍和寒暄——在这个网站的问答格式中没有它们的位置。直接去解决这个问题。“所以我搜索了几个小时来得到正确的布局”。考虑使用布局填充和边框。非常感谢,这真的很有帮助。我会考虑你的3个建议,我会回复这个帖子。如果有一个感谢按钮或什么的话,我一定会按它
public class MainFrame extends JFrame {
//ImageIcon dust2;
public MainFrame(String title) {
super(title);
//GridLayout gridMain = new GridLayout(5, 0, 5, 5);
GridLayout gridCB = new GridLayout(3, 5, 5, 5);
//GridLayout gridButton = new GridLayout(4, 1, 10, 10);
JPanel mainPanel = new JPanel();
BoxLayout mainLayout = new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS);
mainPanel.setLayout(mainLayout);
mainPanel.setBackground(Color.DARK_GRAY);
JPanel checkboxPanel = new JPanel();
checkboxPanel.setLayout(gridCB);
checkboxPanel.setBackground(Color.DARK_GRAY);
JPanel buttonPanel = new JPanel();
BoxLayout buttonLayout = new BoxLayout(buttonPanel, BoxLayout.PAGE_AXIS);
buttonPanel.setLayout(buttonLayout);
buttonPanel.setBorder(new EmptyBorder(6, 6, 6, 6));
buttonPanel.setBackground(Color.DARK_GRAY);
JPanel labelPanel = new JPanel();
labelPanel.setBackground(Color.DARK_GRAY);
String directory = "directory/to/images/";
JPanel topImagePanel = new JPanel();
topImagePanel.setBackground(Color.DARK_GRAY);
topImagePanel.setBorder(new EmptyBorder(6, 6, 6, 6));
String topImagePath = directory + "map selector - top.png";
topImagePanel.add(new JLabel(new ImageIcon(topImagePath)));
JPanel bottomImagePanel = new JPanel();
bottomImagePanel.setBackground(Color.DARK_GRAY);
bottomImagePanel.setBorder(new EmptyBorder(6, 6, 6, 6));
String bottomImagePath = directory + "map selector - bottom.png";
bottomImagePanel.add(new JLabel(new ImageIcon(bottomImagePath)));
mainPanel.add(topImagePanel);
mainPanel.add(checkboxPanel);
mainPanel.add(buttonPanel);
mainPanel.add(labelPanel);
mainPanel.add(bottomImagePanel);
// [...]
//Buttons
JButton startButton = new JButton("Start");
startButton.setBackground(Color.DARK_GRAY);
startButton.setForeground(Color.LIGHT_GRAY);
gbc3.gridx = 0;
gbc3.gridy = 0;
gbc3.insets = new Insets(10, 10, 10, 10);
startButton.setPreferredSize(new Dimension(400, 400));
buttonPanel.add(startButton, gbc3);
startButton.setAlignmentX(Component.CENTER_ALIGNMENT);
buttonPanel.add(Box.createRigidArea(new Dimension(0, 6)));
JButton newmapButton = new JButton("New Map");
newmapButton.setBackground(Color.DARK_GRAY);
newmapButton.setForeground(Color.LIGHT_GRAY);
gbc3.gridx = 0;
gbc3.gridy = 1;
gbc3.weightx = 1.0;
gbc3.weighty = 1.0;
gbc3.insets = new Insets(0,0,10,10);
buttonPanel.add(newmapButton, gbc3);
newmapButton.setAlignmentX(Component.CENTER_ALIGNMENT);
newmapButton.setEnabled(false);
buttonPanel.add(Box.createRigidArea(new Dimension(0, 6)));
JButton resetButton = new JButton("Reset");
resetButton.setBackground(Color.DARK_GRAY);
resetButton.setForeground(Color.LIGHT_GRAY);
gbc3.gridx = 0;
gbc3.gridy = 3;
gbc3.insets = new Insets(0,0,10,10);
buttonPanel.add(resetButton, gbc3);
resetButton.setAlignmentX(Component.CENTER_ALIGNMENT);
resetButton.setEnabled(false);
// [...]
}
}
java.util.List<String> gameMaps = Arrays.asList(
"Dust II", "Train", "Mirage", "Inferno", "Cobblestone", "Overpass",
"Cache", "Aztec", "Dust", "Vertigo", "Nuke", "Office", "Italy",
"Assault", "Militia"
);
ItemListener mapCheckBoxListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent itemEvent) {
JCheckBox checkBox = (JCheckBox) itemEvent.getSource();
if (checkBox.isSelected()) {
map.mList.add(checkBox.getName());
} else {
map.removeMap(checkBox.getName());
}
}
};
java.util.List<JCheckBox> mapCheckBoxes = new ArrayList<>();
for (String gameMap : gameMaps) {
JCheckBox mapCheckBox = new JCheckBox(gameMap);
mapCheckBox.setName(gameMap);
mapCheckBox.setBackground(Color.DARK_GRAY);
mapCheckBox.setForeground(Color.LIGHT_GRAY);
checkboxPanel.add(mapCheckBox);
mapCheckBox.setSelected(false);
mapCheckBox.addItemListener(mapCheckBoxListener);
mapCheckBoxes.add(mapCheckBox);
}
// [....]
private void setMapsEnabled(java.util.List<JCheckBox> mapCheckBoxes, boolean enabled) {
for (JCheckBox mapCheckBox : mapCheckBoxes) {
mapCheckBox.setEnabled(enabled);
}
}