【问题标题】:Java GUI, trying to position radio buttons and check boxesJava GUI,试图定位单选按钮和复选框
【发布时间】:2014-03-31 07:59:23
【问题描述】:

所以我尝试创建一系列显示如下的单选按钮和复选框:

          Radio Button
Check Box
          Radio Button
Check Box
          Radio Button

但是,我仍在学习 java 的过程中,我想知道是否有人可以解决这个问题。目前按钮和框显示在正确的位置,但是由于某种原因没有显示第一个单选按钮(“时间”)。如果您能描述原因和可能的解决方案,那就太好了。

谢谢

更新代码:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class Question2 {
    public static void main(String[] args) {
        MyFrame f = new MyFrame("Font Chooser");
        f.init();
    }
}

class MyFrame extends JFrame {
    MyFrame(String title) {
        super(title);
    }

    private JPanel mainPanel;
    private GridBagConstraints gbc = new GridBagConstraints();
    private GridBagLayout gbLayout = new GridBagLayout();

    void init() {
        mainPanel = new JPanel();
        mainPanel.setLayout(gbLayout);
        mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 20, 10, 20));
        this.setContentPane(mainPanel);

        gbc.gridx = 0;
        gbc.gridy = 1;

        JCheckBox cb = new JCheckBox("Bold");
        gbLayout.setConstraints(cb, gbc);
        mainPanel.add(cb);
        gbc.gridy = 3;
        gbLayout.setConstraints(cb, gbc);
        cb = new JCheckBox("Italic");
        mainPanel.add(cb);

        gbc.gridx = 1;
        gbc.gridy = 0;

        JRadioButton rb = new JRadioButton("Times");
        gbLayout.setConstraints(rb, gbc);
        mainPanel.add(rb, gbc);
        gbc.gridy = 2;
        gbLayout.setConstraints(rb, gbc);
        rb = new JRadioButton("Helvatica");
        mainPanel.add(rb, gbc);
        gbc.gridy = 4;
        gbLayout.setConstraints(rb, gbc);
        rb = new JRadioButton("Courier");
        mainPanel.add(rb, gbc);


        this.pack();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}

【问题讨论】:

  • 你的代码的当前输出是什么?你得到的东西接近你想要的吗?
  • 目前“Helvatica”和“Times”单选按钮直接在彼此之上输出。复选框没问题,只是单选按钮搞砸了。
  • 您是希望将它们显示在交错列中,还是仅显示在两个平行列中?

标签: java user-interface checkbox radio-button gridbaglayout


【解决方案1】:

问题来了,你说每个高度是 3,但实际上每个单元格都是 1。

cRadioButton.gridheight = 3; // change this to 1

这是完整的源代码,我确实对其他答案进行了一些建议的更改,因为在某些时候你会想要做一些不同的事情(每种类型的按钮都有不同的动作侦听器实现)。

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class MyFrame1 extends JFrame {
    MyFrame1(String title) {
        super(title);
    }

    private JPanel mainPanel;
    private GridBagConstraints gbc = new GridBagConstraints();
    private GridBagLayout gbLayout = new GridBagLayout();

    void init() {
        mainPanel = new JPanel();
        mainPanel.setLayout(gbLayout);
        mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 20, 10, 20));
        this.setContentPane(mainPanel);

        gbc.gridx = 0;
        gbc.gridy = 1;
        JCheckBox italic = new JCheckBox("Italic");
        gbLayout.setConstraints(italic, gbc);
        mainPanel.add(italic);

        JCheckBox bold = new JCheckBox("Bold");
        gbc.gridy = 3;
        gbLayout.setConstraints(bold, gbc);
        mainPanel.add(bold);

        gbc.gridx = 1;
        gbc.gridy = 0;
        JRadioButton times = new JRadioButton("Times");
        gbLayout.setConstraints(times, gbc);
        mainPanel.add(times, gbc);

        gbc.gridy = 2;
        JRadioButton helv = new JRadioButton("Helvatica");
        gbLayout.setConstraints(helv, gbc);
        mainPanel.add(helv, gbc);

        gbc.gridy = 4;
        JRadioButton courier = new JRadioButton("Courier");
        gbLayout.setConstraints(courier, gbc);
        mainPanel.add(courier, gbc);


        this.pack();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
    public static void main(String[] args) {
        MyFrame1 f = new MyFrame1("Font Chooser");
        f.init();
    }
}

【讨论】:

  • 谢谢,我现在遇到的问题是所有单选按钮都在同一个位置。单选按钮的新代码:
  • 好的,部分问题是您使用了两个不同的面板 - 主面板包含复选框,然后您添加了另一个面板 newpanel 来保存单选按钮。每个面板将单独布置。至少对我来说,我发现最简单的方法是在纸上画出你想要的布局,然后在上面画一个由行和列组成的网格。使用您的示例第一列是复选框,第二列是单选按钮。 (0,0) 为空白,(0,1) 为第一个 rb,然后 (1, 0) 为第一个复选框,(1,1) 为空白。等等。仅使用 1 个面板 - 5 行,2 列。
  • 干杯,我尝试使用您上面的代码,但单选按钮和复选框没有出现在正确的位置。我已经更改了我的代码(见上文),以便按钮和框都是同一框架的一部分,现在唯一的问题是“时间”单选按钮没有出现。
  • 我已经用更新的代码替换了解决方案。再一次,我修改了一些,但它有效。我把我的 x 和 y 坐标弄混了。 x 坐标穿过行,y 沿着网格向下。如果可行,请将答案标记为已接受。 :-)
【解决方案2】:

您似乎一直在重新分配同一个对象,这可能会导致您的重叠。而不是

JRadioButton rb = new JRadioButton("Times");
//...
newPanel.add(rb);
rb = new JRadioButton("Helvatica");
//...
newPanel.add(rb);
//and so on

试试类似的东西

JRadioButton times = new JRadioButton("Times");
JRadioButton helva = new JRadioButton("Helvatica");
//...

newPanel.add(times);
newPanel.add(helva);

【讨论】:

  • 所以我做到了。它已经到了,但是我如何分隔复选框的网格值?
  • 目前所有单选按钮的位置完全相同。
  • 谢谢,我已经获取了您的代码元素并更改了我的原始代码,以便它们都出现在同一个框架中,唯一的问题(如上详述)是 ("times" ) 按钮根本没有出现。
  • 您仍在一遍又一遍地使用相同的GridBagConstraints 对象“cRadioButton”。对约束对象做同样的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多